aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi
diff options
context:
space:
mode:
authorGravatar Masood Malekghassemi <atash@google.com>2016-02-29 14:41:42 -0800
committerGravatar Masood Malekghassemi <atash@google.com>2016-02-29 14:48:33 -0800
commit334e0ee37012752a9747594dbdbde9f3f0dbc8d5 (patch)
treedab035c86ff4099d0a00923d434841f079eacaa5 /src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi
parent1df086067c66abeaded61fc725144df780362c0e (diff)
Address some memory hazards in Cython code
Some __dealloc__ methods were calling Python methods, and some references were being dropped on the floor instead of threaded through gRPC core.
Diffstat (limited to 'src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi')
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi
index bbf8413299..59cfc1f452 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi
@@ -137,10 +137,14 @@ cdef class CompletionQueue:
pass
def __dealloc__(self):
+ cdef gpr_timespec c_deadline = gpr_inf_future(GPR_CLOCK_REALTIME)
if self.c_completion_queue != NULL:
- # Ensure shutdown, pump the queue
+ # Ensure shutdown
if not self.is_shutting_down:
- self.shutdown()
+ grpc_completion_queue_shutdown(self.c_completion_queue)
+ # Pump the queue
while not self.is_shutdown:
- self.poll()
+ event = grpc_completion_queue_next(
+ self.c_completion_queue, c_deadline, NULL)
+ self._interpret_event(event)
grpc_completion_queue_destroy(self.c_completion_queue)