GUI segfault upon loading experimental data
Naive attempt to use the GUI: Skip project, experiment, data, open file trypsin.hdf -> segfault
The segfault comes from a unique_ptr::get() statement in Diffractometer::detector(). This statement is not faulty. So we have memory corruption somewhere else.
Thread 1 "NSXTool" received signal SIGSEGV, Segmentation fault.
std::__uniq_ptr_impl<nsx::Detector, std::default_delete<nsx::Detector> >::_M_ptr (this=0x28) at /usr/include/c++/10/bits/unique_ptr.h:173
173 pointer _M_ptr() const { return std::get<0>(_M_t); }
(gdb) bt
#0 std::__uniq_ptr_impl<nsx::Detector, std::default_delete<nsx::Detector> >::_M_ptr (this=0x28) at /usr/include/c++/10/bits/unique_ptr.h:173
#1 0x000055555572b672 in std::unique_ptr<nsx::Detector, std::default_delete<nsx::Detector> >::get (this=0x28) at /usr/include/c++/10/bits/unique_ptr.h:422
#2 0x000055555572a8ba in nsx::Diffractometer::detector (this=0x0) at /G/sw/nsx/core/instrument/Diffractometer.cpp:91
#3 0x00005555557b368e in nsx::IDataReader::IDataReader (this=0x55555712d720, filename="/local/testdata/BioDiff/trypsin.hdf", diffractometer=0x0) at /G/sw/nsx/core/raw/IDataReader.cpp:39
#4 0x0000555555786c2f in nsx::HDF5MetaDataReader::HDF5MetaDataReader (this=0x55555712d720, filename="/local/testdata/BioDiff/trypsin.hdf", diffractometer=0x0) at /G/sw/nsx/core/loader/HDF5MetaDataReader.cpp:32
#5 0x0000555555786979 in nsx::HDF5DataReader::HDF5DataReader (this=0x55555712d720, filename="/local/testdata/BioDiff/trypsin.hdf", instrument=0x0) at /G/sw/nsx/core/loader/HDF5DataReader.cpp:25
#6 0x000055555569dbd0 in nsx::create_reader<nsx::HDF5DataReader> (filename="/local/testdata/BioDiff/trypsin.hdf", diffractometer=0x0) at /G/sw/nsx/core/algo/DataReaderFactory.cpp:31
#7 0x000055555569fc34 in std::__invoke_impl<std::shared_ptr<nsx::DataSet>, std::shared_ptr<nsx::DataSet> (*&)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nsx::Diffractometer*), std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nsx::Diffractometer*> (__f=@0x555556ce75f0: 0x55555569db9a <nsx::create_reader<nsx::HDF5DataReader>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nsx::Diffractometer*)>) at /usr/include/c++/10/bits/invoke.h:60
#8 0x000055555569f783 in std::__invoke_r<std::shared_ptr<nsx::DataSet>, std::shared_ptr<nsx::DataSet> (*&)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nsx::Diffractometer*), std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nsx::Diffractometer*> (__fn=@0x555556ce75f0: 0x55555569db9a <nsx::create_reader<nsx::HDF5DataReader>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nsx::Diffractometer*)>) at /usr/include/c++/10/bits/invoke.h:115
#9 0x000055555569ee7b in std::_Function_handler<std::shared_ptr<nsx::DataSet> (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nsx::Diffractometer*), std::shared_ptr<nsx::DataSet> (*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nsx::Diffractometer*)>::_M_invoke(std::_Any_data const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nsx::Diffractometer*&&) (__functor=..., __args#0="/local/testdata/BioDiff/trypsin.hdf",
__args#1=@0x7fffffffcd10: 0x0) at /usr/include/c++/10/bits/std_function.h:292
#10 0x000055555569e0ac in std::function<std::shared_ptr<nsx::DataSet> (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nsx::Diffractometer*)>::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nsx::Diffractometer*) const (this=0x555556ce75f0, __args#0="/local/testdata/BioDiff/trypsin.hdf", __args#1=0x0) at /usr/include/c++/10/bits/std_function.h:622
#11 0x000055555569d701 in nsx::DataReaderFactory::create (this=0x7fffffffcf30, extension="hdf", filename="/local/testdata/BioDiff/trypsin.hdf", diffractometer=0x0) at /G/sw/nsx/core/algo/DataReaderFactory.cpp:58
#12 0x00005555555f4eb8 in Session::loadData (this=0x7fffffffdee0, format=nsx::DataFormat::HDF5) at /G/sw/nsx/gui/models/Session.cpp:157
#13 0x000055555560bcc1 in operator() (__closure=0x5555564e2b00) at /G/sw/nsx/gui/subframe_experiment/properties/NumorProperty.cpp:94
#14 0x000055555560cb2a in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, NumorProperty::addMenuRequested()::<lambda()> >::call(struct {...} &, void **) (f=..., arg=0x7fffffffd200) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:146
#15 0x000055555560cae1 in QtPrivate::Functor<NumorProperty::addMenuRequested()::<lambda()>, 0>::call<QtPrivate::List<>, void>(struct {...} &, void *, void **) (f=..., arg=0x7fffffffd200) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:256
#16 0x000055555560ca26 in QtPrivate::QFunctorSlotObject<NumorProperty::addMenuRequested()::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=1, this_=0x5555564e2af0, r=0x5555563f8b80, a=0x7fffffffd200, ret=0x0)
at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:443
#17 0x00007ffff6504546 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#18 0x00007ffff6f8ab62 in QAction::triggered(bool) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#19 0x00007ffff6f8d3a1 in QAction::activate(QAction::ActionEvent) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#20 0x00007ffff710750a in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#21 0x00007ffff710ea32 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#22 0x00007ffff6fd0f9e in QWidget::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#23 0x00007ffff6f9115f in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#24 0x00007ffff6f9804b in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#25 0x00007ffff64cdf6a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#26 0x00007ffff6f97076 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#27 0x00007ffff6fe9573 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#28 0x00007ffff6fec32e in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#29 0x00007ffff6f9115f in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#30 0x00007ffff64cdf6a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#31 0x00007ffff68a7583 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#32 0x00007ffff687d64c in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#33 0x00007ffff2a5e7da in ?? () from /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#34 0x00007ffff504ce6b in g_main_context_dispatch () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#35 0x00007ffff504d118 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#36 0x00007ffff504d1cf in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#37 0x00007ffff65254bf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#38 0x00007ffff64cc92b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#39 0x00007ffff64d4ba0 in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#40 0x00005555555bbcd2 in main (argc=1, argv=0x7fffffffe038) at /G/sw/nsx/main/main.cpp:35
Edited by Wuttke, Joachim