Bug 420202 - Ekos intermittently crashes when connection EFW via INDIGO
Summary: Ekos intermittently crashes when connection EFW via INDIGO
Status: RESOLVED UPSTREAM
Alias: None
Product: kstars
Classification: Applications
Component: general (show other bugs)
Version: 3.4.1
Platform: Other Linux
: NOR crash
Target Milestone: ---
Assignee: Jasem Mutlaq
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-04-17 15:12 UTC by boris
Modified: 2020-05-21 19:27 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description boris 2020-04-17 15:12:43 UTC
SUMMARY

When using Ekos together with INDIGO server, there seems to be a condition that's causing Ekos to crash. When manually connecting the EFW driver quickly after connecting the camera driver, the application crashes.

Stacktrace
Thread 1 "kstars" received signal SIGSEGV, Segmentation fault.
0x000055909bd02831 in Ekos::FilterManager::initFilterProperties (this=0x5590a1558ff0) at ./kstars/oal/filter.h:44
44      ./kstars/oal/filter.h: No such file or directory.
(gdb) bt
#0  0x000055909bd02831 in Ekos::FilterManager::initFilterProperties (this=0x5590a1558ff0) at ./kstars/oal/filter.h:44
#1  0x000055909bd029fa in Ekos::FilterManager::setCurrentFilterWheel (this=0x5590a1558ff0, filter=0x5590a0fe2dd0) at ./kstars/ekos/auxiliary/filtermanager.cpp:225
#2  0x000055909bd2470f in Ekos::Capture::checkFilter (this=0x5590a0c65cc0, filterNum=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qsharedpointer_impl.h:312
#3  0x000055909bd2ea13 in Ekos::Capture::addFilter (this=0x5590a0c65cc0, newFilter=newFilter@entry=0x5590a0fe2dd0) at ./kstars/ekos/capture/capture.cpp:442
#4  0x000055909bcbcd3a in Ekos::Manager::setFilter (this=0x55909fe8a310, filterDevice=0x5590a0fe2dd0) at /usr/include/c++/9/bits/unique_ptr.h:352
#5  0x00007fbc27f88558 in QMetaObject::activate(QObject*, int, int, void**) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x000055909bbabd16 in INDIListener::newFilter (this=this@entry=0x5590a019c1d0, _t1=<optimized out>) at ./obj-x86_64-linux-gnu/kstars/KStarsLib_autogen/FRI4DANIHA/moc_indilistener.cpp:416
#7  0x000055909bc44d44 in INDIListener::registerProperty (this=0x5590a019c1d0, prop=0x7fbbdc02a690) at ./kstars/indi/indilistener.cpp:280
#8  0x000055909bbe5124 in INDIListener::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at ./obj-x86_64-linux-gnu/kstars/KStarsLib_autogen/FRI4DANIHA/moc_indilistener.cpp:182
#9  0x00007fbc27f88e4a in QObject::event(QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#10 0x00007fbc28a9aa86 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#11 0x00007fbc28aa3e00 in QApplication::notify(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#12 0x00007fbc27f5ca2a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#13 0x00007fbc27f5f6a8 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#14 0x00007fbc27fb5037 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#15 0x00007fbc26a658bd in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#16 0x00007fbc26a65b40 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#17 0x00007fbc26a65be3 in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#18 0x00007fbc27fb4635 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#19 0x00007fbc27f5b5cb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#20 0x00007fbc27f63336 in QCoreApplication::exec() () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#21 0x000055909b9816ac in main (argc=<optimized out>, argv=<optimized out>) at ./kstars/main.cpp:332

Some additional gdb info.

(gdb) p this
$1 = (Ekos::FilterManager * const) 0x5590a1558ff0
(gdb) p *this
$2 = {<QDialog> = {<No data fields>}, <Ui::FilterSettings> = {<Ui_FilterSettings> = {verticalLayout = 0x5590a0e065d0, horizontalLayout = 0x5590a0e71040, label = 0x5590a15e0850, filterNameLabel = 0x5590a0cace10, horizontalSpacer = 0x5590a0c28740, 
      filterView = 0x5590a0dab060, horizontalLayout_2 = 0x5590a1789a20, label_2 = 0x5590a0da5680, horizontalSpacer_2 = 0x5590a0bfb850, buttonBox = 0x5590a15d8680}, <No data fields>}, static staticMetaObject = {d = {superdata = 0x7fbc28fae8c0 <QDialog::staticMetaObject>, 
      stringdata = 0x55909c295460 <qt_meta_stringdata_Ekos__FilterManager>, data = 0x55909c2951c0 <qt_meta_data_Ekos__FilterManager>, static_metacall = 0x55909bbe5500 <Ekos::FilterManager::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, 
      relatedMetaObjects = 0x0, extradata = 0x0}}, m_currentFilterDevice = 0x5590a0fe2dd0, m_currentFilterLabels = {<QList<QString>> = {<QListSpecialMethods<QString>> = {<No data fields>}, {p = {static shared_null = {ref = {atomic = {
                _q_value = {<std::__atomic_base<int>> = {static _S_alignment = 4, _M_i = -1}, <No data fields>}}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0x5590a0acf930}, d = 0x5590a0acf930}}, <No data fields>}, m_currentFilterPosition = 0, 
  m_currentFilterExposure = -1, m_ActiveFilters = {<QListSpecialMethods<OAL::Filter*>> = {<No data fields>}, {p = {static shared_null = {ref = {atomic = {_q_value = {<std::__atomic_base<int>> = {static _S_alignment = 4, _M_i = -1}, <No data fields>}}}, alloc = 0, 
          begin = 0, end = 0, array = {0x0}}, d = 0x5590a10ce840}, d = 0x5590a10ce840}}, targetFilter = 0x0, currentFilter = 0x0, m_useTargetFilter = false, retries = 0 '\000', lastFilterOffset = 0, filterModel = 0x5590a047bd50, m_FilterNameProperty = 0x7fbbdc031b70, 
  m_FilterPositionProperty = 0x7fbbdc032630, m_FilterConfirmSet = 0x0, operationQueue = {<QList<Ekos::FilterState>> = {<QListSpecialMethods<Ekos::FilterState>> = {<No data fields>}, {p = {static shared_null = {ref = {atomic = {_q_value = {<std::__atomic_base<int>> = {
                    static _S_alignment = 4, _M_i = -1}, <No data fields>}}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0x7fbc2803f760 <QListData::shared_null>}, d = 0x7fbc2803f760 <QListData::shared_null>}}, <No data fields>}, state = Ekos::FILTER_IDLE, 
  targetFilterPosition = -1, targetFilterOffset = -1, m_FocusReady = false, m_FocusAbsPositionPending = false, m_FocusAbsPosition = -1, lockDelegate = {wp = {d = 0x5590a045eab0, value = 0x5590a0301b90}}, noEditDelegate = {wp = {d = 0x5590a05fc580, 
      value = 0x5590a0d1f890}}, exposureDelegate = {wp = {d = 0x55909fa49270, value = 0x5590a05aee90}}, offsetDelegate = {wp = {d = 0x5590a0dad490, value = 0x5590a0d22b00}}, useAutoFocusDelegate = {wp = {d = 0x5590a0d207c0, value = 0x5590a0dd1090}}, 
  m_Policy = Ekos::FilterManager::ALL_POLICIES, m_ConfirmationPending = false}
Comment 1 boris 2020-04-17 15:14:00 UTC
This seems to have some similarities to https://bugs.kde.org/show_bug.cgi?id=420187 - both smell like some form of race condition.
Comment 2 Jasem Mutlaq 2020-05-21 19:27:22 UTC
Ekos only supports INDI at the time being.