-
Couldn't load subscription status.
- Fork 99
Description
I'm encountering some segfaults when trying to read a ROOT file into Python as per #1005. A small fraction of the time, my code produces the following segfault output:
$ python tof_pet_recon.py
Scanner parameters:=
Scanner type := myScanner
Number of rings := 48
Number of detectors per ring := 666
Inner ring diameter (cm) := 87
Average depth of interaction (cm) := 0.84
Distance between rings (cm) := 0.85
Default bin size (cm) := 0.197
View offset (degrees) := 0
Maximum number of non-arc-corrected bins := 672
Default number of arc-corrected bins := 336
Number of blocks per bucket in transaxial direction := 1
Number of blocks per bucket in axial direction := 1
Number of crystals per block in axial direction := 1
Number of crystals per block in transaxial direction := 1
Number of detector layers := 1
Number of crystals per singles unit in axial direction := 48
Number of crystals per singles unit in transaxial direction := 1
Scanner geometry (BlocksOnCylindrical/Cylindrical/Generic) := Cylindrical
Scanner orientation (X or Y) := X
end scanner parameters:=
Constructing proj_data_info
Done constructing proj_data_info
root_header.name = tmp_header.hroot
INFO: InputStreamFromROOTFile: Processing data with the following event type inclusions:
Unscattered from same eventID: 1
Unscattered from different eventIDs: 1
Scattered from same eventID: 1
Scattered different eventIDs: 1
/bin/bash: /home/jvavrek/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
WARNING: CListModeDataROOT: Trying to figure out the scanner geometry from the information given in the ROOT header file.
INFO: CListModeDataROOT: used ROOT file /home/jvavrek/5Mevents.root
Processing listmode... set_up:
Processing listmode... process_data:
Processing time frame 1
*** Break *** segmentation violation
===========================================================
There was a crash.
This is the entire stack trace of all threads:
===========================================================
#0 0x00007f39f8cc7dba in __GI___wait4 (pid=2588745, stat_loc=stat_loc
entry=0x7ffc9e4e38e8, options=options
entry=0, usage=usage
entry=0x0) at ../sysdeps/unix/sysv/linux/wait4.c:27
#1 0x00007f39f8cc7d7b in __GI___waitpid (pid=<optimized out>, stat_loc=stat_loc
entry=0x7ffc9e4e38e8, options=options
entry=0) at waitpid.c:38
#2 0x00007f39f8c370e7 in do_system (line=<optimized out>) at ../sysdeps/posix/system.c:172
#3 0x00007f39f76b03be in TUnixSystem::StackTrace() () from /home/jvavrek/root/install/lib/libCore.so
#4 0x00007f39f76ad245 in TUnixSystem::DispatchSignals(ESignals) () from /home/jvavrek/root/install/lib/libCore.so
#5 <signal handler called>
#6 0x00007f39f812bcc4 in stir::CListEventCylindricalScannerWithDiscreteDetectors::get_bin(stir::Bin&, stir::ProjDataInfo const&) const () from /home/jvavrek/STIR-tmp/STIR/install/python/_stir.so
#7 0x00007f39f8123fcc in stir::LmToProjData::get_bin_from_event(stir::Bin&, stir::ListEvent const&) const () from /home/jvavrek/STIR-tmp/STIR/install/python/_stir.so
#8 0x00007f39f81264b6 in stir::LmToProjData::process_data() () from /home/jvavrek/STIR-tmp/STIR/install/python/_stir.so
#9 0x00007f39f7f187a0 in _wrap_LmToProjData_process_data () from /home/jvavrek/STIR-tmp/STIR/install/python/_stir.so
#10 0x00005638c02c6503 in method_vectorcall_NOARGS (func=<optimized out>, args=0x7f39e833f1e8, nargsf=<optimized out>, kwnames=0x0) at /tmp/build/80754af9/python-split_1631797238431/work/Objects/descrobject.c:434
#11 0x00005638c026810d in _PyObject_VectorcallTstate (kwnames=0x0, nargsf=<optimized out>, args=0x7f39e833f1e8, callable=0x7f39e9725ea0, tstate=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Include/cpython/abstract.h:118
#12 PyObject_Vectorcall () at /tmp/build/80754af9/python-split_1631797238431/work/Include/cpython/abstract.h:127
#13 call_function (kwnames=0x0, oparg=<optimized out>, pp_stack=<synthetic pointer>, tstate=0x5638c1beadd0) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:5075
#14 _PyEval_EvalFrameDefault (tstate=<optimized out>, f=0x7f39e833f040, throwflag=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:3504
#15 0x00005638c02f2753 in _PyEval_EvalFrame () at /tmp/build/80754af9/python-split_1631797238431/work/Include/internal/pycore_ceval.h:40
#16 function_code_fastcall (globals=<optimized out>, nargs=<optimized out>, args=<optimized out>, co=<optimized out>, tstate=0x5638c1beadd0) at /tmp/build/80754af9/python-split_1631797238431/work/Objects/call.c:330
#17 _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Objects/call.c:367
#18 0x00005638c026810d in _PyObject_VectorcallTstate (kwnames=0x0, nargsf=<optimized out>, args=0x5638c1cd7900, callable=0x7f39e8337ca0, tstate=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Include/cpython/abstract.h:118
#19 PyObject_Vectorcall () at /tmp/build/80754af9/python-split_1631797238431/work/Include/cpython/abstract.h:127
#20 call_function (kwnames=0x0, oparg=<optimized out>, pp_stack=<synthetic pointer>, tstate=0x5638c1beadd0) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:5075
#21 _PyEval_EvalFrameDefault (tstate=<optimized out>, f=0x5638c1cd7790, throwflag=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:3504
#22 0x00005638c02f18e2 in _PyEval_EvalFrame () at /tmp/build/80754af9/python-split_1631797238431/work/Include/internal/pycore_ceval.h:40
#23 _PyEval_EvalCode (tstate=<optimized out>, _co=<optimized out>, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=0x0, kwargs=0x0, kwcount=0, kwstep=2, defs=0x0, defcount=0, kwdefs=0x0, closure=0x0, name=<optimized out>, qualname=0x0) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:4327
#24 0x00005638c03a3bac in _PyEval_EvalCodeWithName (qualname=0x0, name=0x0, closure=0x0, kwdefs=0x0, defcount=0, defs=0x0, kwstep=2, kwcount=0, kwargs=<optimized out>, kwnames=<optimized out>, argcount=<optimized out>, args=<optimized out>, locals=<optimized out>, globals=<optimized out>, _co=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:4359
#25 PyEval_EvalCodeEx (_co=<optimized out>, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kws=<optimized out>, kwcount=0, defs=0x0, defcount=0, kwdefs=0x0, closure=0x0) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:4375
#26 0x00005638c02f29eb in PyEval_EvalCode (co=<optimized out>, globals=<optimized out>, locals=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:826
#27 0x00005638c03a3c5b in run_eval_code_obj (tstate=0x5638c1beadd0, co=0x7f39f878b450, globals=0x7f39f882fc40, locals=0x7f39f882fc40) at /tmp/build/80754af9/python-split_1631797238431/work/Python/pythonrun.c:1219
#28 0x00005638c03d7705 in run_mod (mod=<optimized out>, filename=<optimized out>, globals=0x7f39f882fc40, locals=0x7f39f882fc40, flags=<optimized out>, arena=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Python/pythonrun.c:1240
#29 0x00005638c027c60d in pyrun_file (fp=0x5638c1be8340, filename=0x7f39f8834b70, start=<optimized out>, globals=0x7f39f882fc40, locals=0x7f39f882fc40, closeit=1, flags=0x7ffc9e4e6de8) at /tmp/build/80754af9/python-split_1631797238431/work/Python/pythonrun.c:1138
#30 0x00005638c03dc49f in pyrun_simple_file (flags=0x7ffc9e4e6de8, closeit=1, filename=0x7f39f8834b70, fp=0x5638c1be8340) at /tmp/build/80754af9/python-split_1631797238431/work/Python/pythonrun.c:449
#31 PyRun_SimpleFileExFlags (fp=0x5638c1be8340, filename=<optimized out>, closeit=1, flags=0x7ffc9e4e6de8) at /tmp/build/80754af9/python-split_1631797238431/work/Python/pythonrun.c:482
#32 0x00005638c03dcc7f in pymain_run_file (cf=0x7ffc9e4e6de8, config=0x5638c1be9400) at /tmp/build/80754af9/python-split_1631797238431/work/Modules/main.c:379
#33 pymain_run_python (exitcode=0x7ffc9e4e6de0) at /tmp/build/80754af9/python-split_1631797238431/work/Modules/main.c:604
#34 Py_RunMain () at /tmp/build/80754af9/python-split_1631797238431/work/Modules/main.c:683
#35 0x00005638c03dcd79 in Py_BytesMain (argc=<optimized out>, argv=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Modules/main.c:1129
#36 0x00007f39f8c090b3 in __libc_start_main (main=0x5638c0284d80 <main>, argc=2, argv=0x7ffc9e4e6fe8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffc9e4e6fd8) at ../csu/libc-start.c:308
#37 0x00005638c0361bc3 in _start ()
===========================================================
The lines below might hint at the cause of the crash.
You may get help by asking at the ROOT forum https://root.cern/forum
Only if you are really convinced it is a bug in ROOT then please submit a
report at https://root.cern/bugs Please post the ENTIRE stack trace
from above as an attachment in addition to anything else
that might help us fixing this issue.
===========================================================
#6 0x00007f39f812bcc4 in stir::CListEventCylindricalScannerWithDiscreteDetectors::get_bin(stir::Bin&, stir::ProjDataInfo const&) const () from /home/jvavrek/STIR-tmp/STIR/install/python/_stir.so
#7 0x00007f39f8123fcc in stir::LmToProjData::get_bin_from_event(stir::Bin&, stir::ListEvent const&) const () from /home/jvavrek/STIR-tmp/STIR/install/python/_stir.so
#8 0x00007f39f81264b6 in stir::LmToProjData::process_data() () from /home/jvavrek/STIR-tmp/STIR/install/python/_stir.so
#9 0x00007f39f7f187a0 in _wrap_LmToProjData_process_data () from /home/jvavrek/STIR-tmp/STIR/install/python/_stir.so
#10 0x00005638c02c6503 in method_vectorcall_NOARGS (func=<optimized out>, args=0x7f39e833f1e8, nargsf=<optimized out>, kwnames=0x0) at /tmp/build/80754af9/python-split_1631797238431/work/Objects/descrobject.c:434
#11 0x00005638c026810d in _PyObject_VectorcallTstate (kwnames=0x0, nargsf=<optimized out>, args=0x7f39e833f1e8, callable=0x7f39e9725ea0, tstate=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Include/cpython/abstract.h:118
#12 PyObject_Vectorcall () at /tmp/build/80754af9/python-split_1631797238431/work/Include/cpython/abstract.h:127
#13 call_function (kwnames=0x0, oparg=<optimized out>, pp_stack=<synthetic pointer>, tstate=0x5638c1beadd0) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:5075
#14 _PyEval_EvalFrameDefault (tstate=<optimized out>, f=0x7f39e833f040, throwflag=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:3504
#15 0x00005638c02f2753 in _PyEval_EvalFrame () at /tmp/build/80754af9/python-split_1631797238431/work/Include/internal/pycore_ceval.h:40
#16 function_code_fastcall (globals=<optimized out>, nargs=<optimized out>, args=<optimized out>, co=<optimized out>, tstate=0x5638c1beadd0) at /tmp/build/80754af9/python-split_1631797238431/work/Objects/call.c:330
#17 _PyFunction_Vectorcall (func=<optimized out>, stack=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Objects/call.c:367
#18 0x00005638c026810d in _PyObject_VectorcallTstate (kwnames=0x0, nargsf=<optimized out>, args=0x5638c1cd7900, callable=0x7f39e8337ca0, tstate=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Include/cpython/abstract.h:118
#19 PyObject_Vectorcall () at /tmp/build/80754af9/python-split_1631797238431/work/Include/cpython/abstract.h:127
#20 call_function (kwnames=0x0, oparg=<optimized out>, pp_stack=<synthetic pointer>, tstate=0x5638c1beadd0) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:5075
#21 _PyEval_EvalFrameDefault (tstate=<optimized out>, f=0x5638c1cd7790, throwflag=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:3504
#22 0x00005638c02f18e2 in _PyEval_EvalFrame () at /tmp/build/80754af9/python-split_1631797238431/work/Include/internal/pycore_ceval.h:40
#23 _PyEval_EvalCode (tstate=<optimized out>, _co=<optimized out>, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=0x0, kwargs=0x0, kwcount=0, kwstep=2, defs=0x0, defcount=0, kwdefs=0x0, closure=0x0, name=<optimized out>, qualname=0x0) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:4327
#24 0x00005638c03a3bac in _PyEval_EvalCodeWithName (qualname=0x0, name=0x0, closure=0x0, kwdefs=0x0, defcount=0, defs=0x0, kwstep=2, kwcount=0, kwargs=<optimized out>, kwnames=<optimized out>, argcount=<optimized out>, args=<optimized out>, locals=<optimized out>, globals=<optimized out>, _co=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:4359
#25 PyEval_EvalCodeEx (_co=<optimized out>, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kws=<optimized out>, kwcount=0, defs=0x0, defcount=0, kwdefs=0x0, closure=0x0) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:4375
#26 0x00005638c02f29eb in PyEval_EvalCode (co=<optimized out>, globals=<optimized out>, locals=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Python/ceval.c:826
#27 0x00005638c03a3c5b in run_eval_code_obj (tstate=0x5638c1beadd0, co=0x7f39f878b450, globals=0x7f39f882fc40, locals=0x7f39f882fc40) at /tmp/build/80754af9/python-split_1631797238431/work/Python/pythonrun.c:1219
#28 0x00005638c03d7705 in run_mod (mod=<optimized out>, filename=<optimized out>, globals=0x7f39f882fc40, locals=0x7f39f882fc40, flags=<optimized out>, arena=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Python/pythonrun.c:1240
#29 0x00005638c027c60d in pyrun_file (fp=0x5638c1be8340, filename=0x7f39f8834b70, start=<optimized out>, globals=0x7f39f882fc40, locals=0x7f39f882fc40, closeit=1, flags=0x7ffc9e4e6de8) at /tmp/build/80754af9/python-split_1631797238431/work/Python/pythonrun.c:1138
#30 0x00005638c03dc49f in pyrun_simple_file (flags=0x7ffc9e4e6de8, closeit=1, filename=0x7f39f8834b70, fp=0x5638c1be8340) at /tmp/build/80754af9/python-split_1631797238431/work/Python/pythonrun.c:449
#31 PyRun_SimpleFileExFlags (fp=0x5638c1be8340, filename=<optimized out>, closeit=1, flags=0x7ffc9e4e6de8) at /tmp/build/80754af9/python-split_1631797238431/work/Python/pythonrun.c:482
#32 0x00005638c03dcc7f in pymain_run_file (cf=0x7ffc9e4e6de8, config=0x5638c1be9400) at /tmp/build/80754af9/python-split_1631797238431/work/Modules/main.c:379
#33 pymain_run_python (exitcode=0x7ffc9e4e6de0) at /tmp/build/80754af9/python-split_1631797238431/work/Modules/main.c:604
#34 Py_RunMain () at /tmp/build/80754af9/python-split_1631797238431/work/Modules/main.c:683
#35 0x00005638c03dcd79 in Py_BytesMain (argc=<optimized out>, argv=<optimized out>) at /tmp/build/80754af9/python-split_1631797238431/work/Modules/main.c:1129
#36 0x00007f39f8c090b3 in __libc_start_main (main=0x5638c0284d80 <main>, argc=2, argv=0x7ffc9e4e6fe8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffc9e4e6fd8) at ../csu/libc-start.c:308
#37 0x00005638c0361bc3 in _start ()
===========================================================
Based on my own print statements, the problematic function call is process_data():
with open("/home/jvavrek/tmp_header.hroot") as f:
print("root_header.name = ", "tmp_header.hroot")
self.lm_to_projdata.set_input_data("tmp_header.hroot")
# Process the listmode data
print("Processing listmode... set_up:")
self.lm_to_projdata.set_up()
print("Processing listmode... process_data:")
self.lm_to_projdata.process_data() # here!
print("Processing listmode... done")However, if I add time.sleep(3) directly before the process_data() call, the segfault never happens. This strongly suggests some kind of race condition in process_data(), maybe due to the previous call to set_up() or set_input_data(). Any thoughts on what could be going on here would be greatly appreciated!
By the way, this segfault does not appear to happen with the new listmode demo, possibly because there's enough space between set_input_data() and process_data()?