There is an exception thrown from ctkPluginContextPrivate::isPluginContextValid() when closing the workbench.
My development environment:
- MITK v2016.11
- msvc2015_64
- qt5.6.3
I have search and confirm the same bug had been marked as solved with the following commit. However it happens again~
2013-09-15 01:47:11 Sascha Zelzer [b3c5ca]
Explicitly clean up service tracker on plug-in stop.
Call stack for your reference:
CTKPluginFramework.dll!ctkPluginContextPrivate::isPluginContextValid() 行 42 C++
CTKPluginFramework.dll!ctkPluginContext::ungetService(const ctkServiceReference & reference) 行 173 C++ liborg_blueberry_core_runtime.dll!ctkServiceTracker<ctkLocation * __ptr64,ctkLocation * __ptr64>::removedService(const ctkServiceReference & reference, ctkLocation * service) 行 484 C++ liborg_blueberry_core_runtime.dll!ctkTrackedService<ctkLocation * __ptr64,ctkLocation * __ptr64>::customizerRemoved(ctkServiceReference item, const ctkServiceEvent & related, ctkLocation * object) 行 132 C++ liborg_blueberry_core_runtime.dll!ctkPluginAbstractTracked<ctkServiceReference,ctkLocation * __ptr64,ctkServiceEvent>::untrack(ctkServiceReference item, ctkServiceEvent related) 行 234 C++ liborg_blueberry_core_runtime.dll!ctkTrackedService<ctkLocation * __ptr64,ctkLocation * __ptr64>::serviceChanged(const ctkServiceEvent & event) 行 89 C++ CTKPluginFramework.dll!ctkTrackedServiceListener::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id, void * * _a) 行 75 C++ Qt5Cored.dll!QMetaMethod::invoke(QObject * object, Qt::ConnectionType connectionType, QGenericReturnArgument returnValue, QGenericArgument val0, QGenericArgument val1, QGenericArgument val2, QGenericArgument val3, QGenericArgument val4, QGenericArgument val5, QGenericArgument val6, QGenericArgument val7, QGenericArgument val8, QGenericArgument val9) 行 2212 C++ Qt5Cored.dll!QMetaObject::invokeMethod(QObject * obj, const char * member, Qt::ConnectionType type, QGenericReturnArgument ret, QGenericArgument val0, QGenericArgument val1, QGenericArgument val2, QGenericArgument val3, QGenericArgument val4, QGenericArgument val5, QGenericArgument val6, QGenericArgument val7, QGenericArgument val8, QGenericArgument val9) 行 1477 C++ Qt5Cored.dll!QMetaObject::invokeMethod(QObject * obj, const char * member, Qt::ConnectionType type, QGenericArgument val0, QGenericArgument val1, QGenericArgument val2, QGenericArgument val3, QGenericArgument val4, QGenericArgument val5, QGenericArgument val6, QGenericArgument val7, QGenericArgument val8, QGenericArgument val9) 行 454 C++ CTKPluginFramework.dll!ctkServiceSlotEntry::invokeSlot(const ctkServiceEvent & event) 行 125 C++ CTKPluginFramework.dll!ctkPluginFrameworkListeners::serviceChanged(const QSet<ctkServiceSlotEntry> & receivers, const ctkServiceEvent & evt, QSet<ctkServiceSlotEntry> & matchBefore) 行 219 C++ CTKPluginFramework.dll!ctkPluginFrameworkListeners::serviceChanged(const QSet<ctkServiceSlotEntry> & receivers, const ctkServiceEvent & evt) 行 190 C++ CTKPluginFramework.dll!ctkServiceRegistration::unregister() 行 171 C++ CTKPluginFramework.dll!ctkPluginFrameworkPrivate::deactivate(ctkPluginContext * __formal) 行 114 C++ CTKPluginFramework.dll!ctkPluginFrameworkPrivate::shutdown0(bool restart, bool wasActive) 行 187 C++ CTKPluginFramework.dll!QtConcurrent::VoidStoredMemberFunctionPointerCall2<void,ctkPluginFrameworkPrivate,bool,bool,bool,bool>::runFunctor() 行 606 C++ CTKPluginFramework.dll!QtConcurrent::RunFunctionTask<void>::run() 行 130 C++ Qt5Cored.dll!QThreadPoolThread::run() 行 93 C++ Qt5Cored.dll!QThreadPrivate::start(void * arg) 行 387 C++ [外部代码]