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