diff options
author | Masood Malekghassemi <atash@google.com> | 2016-02-29 14:41:42 -0800 |
---|---|---|
committer | Masood Malekghassemi <atash@google.com> | 2016-02-29 14:48:33 -0800 |
commit | 334e0ee37012752a9747594dbdbde9f3f0dbc8d5 (patch) | |
tree | dab035c86ff4099d0a00923d434841f079eacaa5 /src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi | |
parent | 1df086067c66abeaded61fc725144df780362c0e (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.pxi | 10 |
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) |