From 53994521687d1c70965e8b2d10bd43eddad23ebb Mon Sep 17 00:00:00 2001 From: Sergey Yakubov <sergey.yakubov@desy.de> Date: Mon, 18 Nov 2019 17:52:16 +0100 Subject: [PATCH] fix segfault --- producer/api/python/asapo_producer.pyx.in | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/producer/api/python/asapo_producer.pyx.in b/producer/api/python/asapo_producer.pyx.in index d1dd8229f..e74837c9c 100644 --- a/producer/api/python/asapo_producer.pyx.in +++ b/producer/api/python/asapo_producer.pyx.in @@ -116,6 +116,9 @@ cdef class PyProducer: Py_XINCREF(<PyObject*>data.base) else: Py_XINCREF(<PyObject*>data) + if callback != None: + Py_XINCREF(<PyObject*>callback) + return cdef EventHeader create_event_header(self,int id, exposed_path,user_meta,subset,ingest_mode): cdef EventHeader event_header @@ -139,6 +142,8 @@ cdef class PyProducer: if err: throw_exception(err) Py_XINCREF(<PyObject*>data) + if callback != None: + Py_XINCREF(<PyObject*>callback) return def send_data(self, id, exposed_path,data, user_meta=None,subset=None,ingest_mode = DEFAULT_INGEST_MODE,callback=None): @@ -161,9 +166,6 @@ cdef class PyProducer: AsapoWrongInputError: wrong input (authorization, meta, ...) AsapoProducerError: actually should not happen """ - if callback != None: - Py_XINCREF(<PyObject*>callback) - if type(data) == np.ndarray or data == None: self.__send_np_array(id,exposed_path,data,user_meta,subset,ingest_mode,callback) elif type(data) == bytes: @@ -199,6 +201,10 @@ cdef class PyProducer: unwrap_callback(<RequestCallbackCython>self.c_callback, <void*>self,<void*>callback if callback != None else NULL)) if err: throw_exception(err) + + if callback != None: + Py_XINCREF(<PyObject*>callback) + return def get_requests_queue_size(self): return self.c_producer.get().GetRequestsQueueSize() @@ -225,8 +231,7 @@ cdef class PyProducer: else: py_err = None py_callback(info,py_err) - if py_callback != None: - Py_XDECREF(<PyObject*>py_callback) + Py_XDECREF(<PyObject*>py_callback) cdef void c_callback(self,py_callback, GenericRequestHeader header, Error err) with gil: self.c_callback_python(py_callback,header,err) -- GitLab