|  | @@ -15,25 +15,6 @@
 | 
	
		
			
				|  |  |  cimport cpython
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -# TODO(https://github.com/grpc/grpc/issues/15662): Reform this.
 | 
	
		
			
				|  |  | -cdef void* _copy_pointer(void* pointer):
 | 
	
		
			
				|  |  | -  return pointer
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# TODO(https://github.com/grpc/grpc/issues/15662): Reform this.
 | 
	
		
			
				|  |  | -cdef void _destroy_pointer(void* pointer):
 | 
	
		
			
				|  |  | -  pass
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -cdef int _compare_pointer(void* first_pointer, void* second_pointer):
 | 
	
		
			
				|  |  | -  if first_pointer < second_pointer:
 | 
	
		
			
				|  |  | -    return -1
 | 
	
		
			
				|  |  | -  elif first_pointer > second_pointer:
 | 
	
		
			
				|  |  | -    return 1
 | 
	
		
			
				|  |  | -  else:
 | 
	
		
			
				|  |  | -    return 0
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  cdef class _GrpcArgWrapper:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    cdef grpc_arg arg
 | 
	
	
		
			
				|  | @@ -52,7 +33,7 @@ cdef grpc_arg _unwrap_grpc_arg(tuple wrapped_arg):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  cdef class _ChannelArg:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  cdef void c(self, argument, grpc_arg_pointer_vtable *vtable, references) except *:
 | 
	
		
			
				|  |  | +  cdef void c(self, argument, _VTable vtable, references) except *:
 | 
	
		
			
				|  |  |      key, value = argument
 | 
	
		
			
				|  |  |      cdef bytes encoded_key = _encode(key)
 | 
	
		
			
				|  |  |      if encoded_key is not key:
 | 
	
	
		
			
				|  | @@ -75,7 +56,7 @@ cdef class _ChannelArg:
 | 
	
		
			
				|  |  |        # lifecycle of the pointer is fixed to the lifecycle of the
 | 
	
		
			
				|  |  |        # python object wrapping it.
 | 
	
		
			
				|  |  |        self.c_argument.type = GRPC_ARG_POINTER
 | 
	
		
			
				|  |  | -      self.c_argument.value.pointer.vtable = vtable
 | 
	
		
			
				|  |  | +      self.c_argument.value.pointer.vtable = &vtable.c_vtable
 | 
	
		
			
				|  |  |        self.c_argument.value.pointer.address = <void*>(<intptr_t>int(value))
 | 
	
		
			
				|  |  |      else:
 | 
	
		
			
				|  |  |        raise TypeError(
 | 
	
	
		
			
				|  | @@ -84,13 +65,10 @@ cdef class _ChannelArg:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  cdef class _ChannelArgs:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  def __cinit__(self, arguments):
 | 
	
		
			
				|  |  | +  def __cinit__(self, arguments, _VTable vtable not None):
 | 
	
		
			
				|  |  |      self._arguments = () if arguments is None else tuple(arguments)
 | 
	
		
			
				|  |  |      self._channel_args = []
 | 
	
		
			
				|  |  |      self._references = []
 | 
	
		
			
				|  |  | -    self._c_arguments.arguments = NULL
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  cdef void _c(self, grpc_arg_pointer_vtable *vtable) except *:
 | 
	
		
			
				|  |  |      self._c_arguments.arguments_length = len(self._arguments)
 | 
	
		
			
				|  |  |      if self._c_arguments.arguments_length != 0:
 | 
	
		
			
				|  |  |        self._c_arguments.arguments = <grpc_arg *>gpr_malloc(
 | 
	
	
		
			
				|  | @@ -107,9 +85,3 @@ cdef class _ChannelArgs:
 | 
	
		
			
				|  |  |    def __dealloc__(self):
 | 
	
		
			
				|  |  |      if self._c_arguments.arguments != NULL:
 | 
	
		
			
				|  |  |        gpr_free(self._c_arguments.arguments)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  @staticmethod
 | 
	
		
			
				|  |  | -  cdef _ChannelArgs from_args(object arguments, grpc_arg_pointer_vtable * vtable):
 | 
	
		
			
				|  |  | -    cdef _ChannelArgs channel_args = _ChannelArgs(arguments)
 | 
	
		
			
				|  |  | -    channel_args._c(vtable)
 | 
	
		
			
				|  |  | -    return channel_args
 |