From c2306483d00d86e8cc9b85a0d013fd7971dc53ad Mon Sep 17 00:00:00 2001 From: Sergey Yakubov <sergey.yakubov@desy.de> Date: Thu, 16 Dec 2021 13:48:16 +0100 Subject: [PATCH] fix segfault --- producer/api/python/asapo_producer.pyx.in | 6 ----- .../python_segfault_dataview/check_linux.sh | 22 ++++++++++++++++++- .../producer_segfault.py | 7 ++++-- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/producer/api/python/asapo_producer.pyx.in b/producer/api/python/asapo_producer.pyx.in index 1a0213181..059a4c812 100644 --- a/producer/api/python/asapo_producer.pyx.in +++ b/producer/api/python/asapo_producer.pyx.in @@ -153,9 +153,6 @@ cdef class PyProducer: if err: throw_exception(err) if data is not None: - if data.base is not None: - Py_XINCREF(<PyObject*>data.base) - else: Py_XINCREF(<PyObject*>data) if callback != None: Py_XINCREF(<PyObject*>callback) @@ -456,9 +453,6 @@ cdef class PyProducer: cdef void c_callback_ndarr(self,py_callback,nd_array,RequestCallbackPayload payload, Error err) with gil: self.c_callback_python(py_callback,nd_array,payload,err) if nd_array is not None: - if nd_array.base is not None: - Py_XDECREF(<PyObject*>nd_array.base) - else: Py_XDECREF(<PyObject*>nd_array) cdef void c_callback_bytesaddr(self,py_callback,bytes_array,RequestCallbackPayload payload, Error err) with gil: diff --git a/tests/automatic/bug_fixes/python_segfault_dataview/check_linux.sh b/tests/automatic/bug_fixes/python_segfault_dataview/check_linux.sh index 414b73f8e..409d69f55 100644 --- a/tests/automatic/bug_fixes/python_segfault_dataview/check_linux.sh +++ b/tests/automatic/bug_fixes/python_segfault_dataview/check_linux.sh @@ -1,9 +1,29 @@ #!/usr/bin/env bash set -e +trap Cleanup EXIT + +Cleanup() { + echo cleanup + rm -rf ${receiver_root_folder} + echo "db.dropDatabase()" | mongo ${beamtime_id}_detector +} + + + export PYTHONPATH=$2:${PYTHONPATH} export Python3_EXECUTABLE=$3 -$Python3_EXECUTABLE $1 $endpoint $beamtime_id $token +beamline=test +receiver_root_folder=/tmp/asapo/receiver/files +facility=test_facility +year=2019 +beamtime_id=asapo_test +receiver_folder=${receiver_root_folder}/${facility}/gpfs/${beamline}/${year}/data/${beamtime_id} +endpoint=127.0.0.1:8400 + +mkdir -p ${receiver_folder} +echo ${receiver_folder} +$Python3_EXECUTABLE $1 $endpoint $beamtime_id diff --git a/tests/automatic/bug_fixes/python_segfault_dataview/producer_segfault.py b/tests/automatic/bug_fixes/python_segfault_dataview/producer_segfault.py index 0a67ae5b2..61ca56fae 100644 --- a/tests/automatic/bug_fixes/python_segfault_dataview/producer_segfault.py +++ b/tests/automatic/bug_fixes/python_segfault_dataview/producer_segfault.py @@ -3,6 +3,9 @@ from __future__ import print_function import asapo_producer import time import numpy as np +import sys + +endpoint, beamtime = sys.argv[1:] def callback(payload, err): if isinstance(err, asapo_producer.AsapoServerWarning): @@ -12,8 +15,8 @@ def callback(payload, err): else: print("successfuly sent: ", payload) -producer = asapo_producer.create_producer("google.com:8700",'processed', "beamtime", 'auto', "data_source", "token", 4, 5000) +producer = asapo_producer.create_producer(endpoint,'processed', beamtime, 'auto', "data_source", '', 4, 5000) data = np.random.random((100, 100)) producer.send(1, exposed_path="processed/foo.dat", stream="foo", data=data.view(np.int8), callback=callback) - +producer.wait_requests_finished(5000) -- GitLab