Skip to content

Fix deadlock exception in FileManagerListJob.

Gleb Popov requested to merge mutex-fix into master

It was visible on FreeBSD with following backtrace:

frame #0: 0x0000000802b8b370 libcxxrt.so.1`::__cxa_throw(void *, std::type_info *, void (*)(void *)) at exception.cc:790
frame #1: 0x0000000802b59c8c libc++.so.1`std::__1::__throw_system_error at system_error.cpp:289
frame #2: 0x0000000802b4a9cd libc++.so.1`std::__1::mutex::lock at mutex.cpp:34
frame #3: 0x00000008017b3f9e libKDevPlatformProject.so.54`KDevelop::FileManagerListJob::startNextJob at filemanagerlistjob.cpp:114
frame #4: 0x00000008017b5b2e libKDevPlatformProject.so.54`_ZN9QtPrivate11FunctorCallINS_11IndexesListIJEEENS_4ListIJEEEvMN8KDevelop18FileManagerListJobEFvvEE4callES8_PS6_PPv at qobjectdefs_impl.h:152
frame #5: 0x00000008017b5aa3 libKDevPlatformProject.so.54`_ZN9QtPrivate15FunctionPointerIMN8KDevelop18FileManagerListJobEFvvEE4callINS_4ListIJEEEvEEvS4_PS2_PPv at qobjectdefs_impl.h:185
frame #6: 0x00000008017b59c6 libKDevPlatformProject.so.54`_ZN9QtPrivate11QSlotObjectIMN8KDevelop18FileManagerListJobEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb at qobjectdefs_impl.h:414
frame #7: 0x0000000803e2caa6 libQt5Core.so.5`QtPrivate::QSlotObjectBase::call at qobjectdefs_impl.h:394
frame #8: 0x0000000803e66648 libQt5Core.so.5`QMetaCallEvent::placeMetaCall at qobject.cpp:518
frame #9: 0x0000000803e68249 libQt5Core.so.5`QObject::event at qobject.cpp:1260
frame #10: 0x0000000802e819e1 libQt5Widgets.so.5`QApplicationPrivate::notify_helper + 273
frame #11: 0x0000000802e82f28 libQt5Widgets.so.5`QApplication::notify + 632
frame #12: 0x0000000803e1640e libQt5Core.so.5`QCoreApplication::notifyInternal2 at qcoreapplication.cpp:1060
frame #13: 0x0000000803e17048 libQt5Core.so.5`QCoreApplication::sendEvent at qcoreapplication.cpp:1450
frame #14: 0x0000000803e17cce libQt5Core.so.5`QCoreApplicationPrivate::sendPostedEvents at qcoreapplication.cpp:1799
frame #15: 0x0000000803e16f4f libQt5Core.so.5`QCoreApplication::sendPostedEvents at qcoreapplication.cpp:1653
frame #16: 0x0000000803ec630e libQt5Core.so.5`postEventSourceDispatch at qeventdispatcher_glib.cpp:276
frame #17: 0x0000000805b52b77 libglib-2.0.so.0`g_main_context_dispatch + 311
frame #18: 0x0000000805b52f03 libglib-2.0.so.0`___lldb_unnamed_symbol117$$libglib-2.0.so.0 + 515
frame #19: 0x0000000805b52fb4 libglib-2.0.so.0`g_main_context_iteration + 100
frame #20: 0x0000000803ec5485 libQt5Core.so.5`QEventDispatcherGlib::processEvents at qeventdispatcher_glib.cpp:422
frame #21: 0x0000000803e112f9 libQt5Core.so.5`QEventLoop::processEvents at qeventloop.cpp:138
frame #22: 0x0000000803e1154f libQt5Core.so.5`QEventLoop::exec at qeventloop.cpp:225
frame #23: 0x000000080027e464 libKDevPlatformTests.so.54`KDevelop::KDevSignalSpy::wait at kdevsignalspy.cpp:48
frame #24: 0x00000000002114ad test_definesandincludes`(anonymous namespace)::loadProject at projectsgenerator.cpp:47
frame #25: 0x0000000000211047 test_definesandincludes`ProjectsGenerator::GenerateSimpleProject at projectsgenerator.cpp:105
frame #26: 0x0000000000208914 test_definesandincludes`TestDefinesAndIncludes::loadSimpleProject at test_definesandincludes.cpp:56
frame #27: 0x00000000002083d9 test_definesandincludes`TestDefinesAndIncludes::qt_static_metacall at moc_test_definesandincludes.cpp:96
frame #28: 0x0000000803e25ed9 libQt5Core.so.5`QMetaMethod::invoke at qmetaobject.cpp:2295
frame #29: 0x00000008002c31f9 libQt5Test.so.5`___lldb_unnamed_symbol8$$libQt5Test.so.5 + 825
frame #30: 0x00000008002c3bef libQt5Test.so.5`___lldb_unnamed_symbol9$$libQt5Test.so.5 + 815
frame #31: 0x00000008002c4989 libQt5Test.so.5`___lldb_unnamed_symbol12$$libQt5Test.so.5 + 745
frame #32: 0x00000008002c517c libQt5Test.so.5`QTest::qRun + 156
frame #33: 0x00000008002c4ef4 libQt5Test.so.5`QTest::qExec + 20
frame #34: 0x000000000020a562 test_definesandincludes`main at test_definesandincludes.cpp:152
frame #35: 0x000000000020811b test_definesandincludes`_start at crt1.c:76

Merge request reports