Bug 355100 - deadlock in backgroundparser [mutex locked while plugin gets loaded]
Summary: deadlock in backgroundparser [mutex locked while plugin gets loaded]
Status: RESOLVED FIXED
Alias: None
Product: kdevplatform
Classification: Developer tools
Component: language (show other bugs)
Version: git master
Platform: Other Linux
: NOR crash
Target Milestone: ---
Assignee: kdevelop-bugs-null
URL:
Keywords:
: 319829 367825 368375 (view as bug list)
Depends on:
Blocks:
 
Reported: 2015-11-09 18:05 UTC by Milian Wolff
Modified: 2016-09-21 09:56 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In: 5.0.1


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Milian Wolff 2015-11-09 18:05:14 UTC
(gdb) thread apply all bt

Thread 7 (Thread 0x7f1ca37fe700 (LWP 25859)):
#0  0x00007f1d217b691d in nanosleep () from /usr/lib/libc.so.6
#1  0x00007f1d224a40ad in ?? () from /usr/lib/libQt5Core.so.5
#2  0x00007f1d223f2da4 in QThread::usleep(unsigned long) () from /usr/lib/libQt5Core.so.5
#3  0x00007f1d1fa7beee in KDevelop::DUChainLock::lockForWrite (this=0x7f1d2028aa10 <KDevelop::(anonymous namespace)::Q_QGS_sdDUChainPrivate::innerFunction()::holder+32>, timeout=0)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:155
#4  0x00007f1d1fa7c298 in KDevelop::DUChainWriteLocker::lock (this=0x7f1ca37fbcb8) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:249
#5  0x00007f1d1fa7c239 in KDevelop::DUChainWriteLocker::DUChainWriteLocker (this=0x7f1ca37fbcb8, duChainLock=0x0, timeout=0)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:233
#6  0x00007f1cb55caebc in ClangHelpers::buildDUChain (file=0x7f1c92514050, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:136
#7  0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1c91d01810, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#8  0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1c92a812e0, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#9  0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1c92a4ae70, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#10 0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1c92999310, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#11 0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1c92711e60, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#12 0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1c936e5130, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#13 0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1c9009d7c0, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
---Type <return> to continue, or q <return> to quit---
#14 0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1c90e10380, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#15 0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1c90001b70, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#16 0x00007f1cb55a3a5e in ClangParseJob::run (this=0x2ff4e20) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/clangparsejob.cpp:306
#17 0x00007f1cb55a43cc in non-virtual thunk to ClangParseJob::run(QSharedPointer<ThreadWeaver::JobInterface>, ThreadWeaver::Thread*) ()
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/clangparsejob.cpp:212
#18 0x00007f1d1d826ad5 in ThreadWeaver::IdDecorator::run (this=0x568fad0, self=..., thread=0x1afe200) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/iddecorator.cpp:69
#19 0x00007f1d1d827a32 in ThreadWeaver::Executor::run (this=0x7f1d1da44d18 <ThreadWeaver::Private::defaultExecutor>, job=..., thread=0x1afe200)
    at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executor.cpp:52
#20 0x00007f1d1d8265d0 in ThreadWeaver::Private::DefaultExecutor::execute (this=0x7f1d1da44d18 <ThreadWeaver::Private::defaultExecutor>, job=..., thread=0x1afe200)
    at /home/milian/projects/kf5/src/frameworks/threadweaver/src/job_p.cpp:70
#21 0x00007f1d1d827cdf in ThreadWeaver::ExecuteWrapper::executeWrapped (this=0x64066e8, job=..., thread=0x1afe200) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:64
#22 0x00007f1d1d82651c in ThreadWeaver::Private::DebugExecuteWrapper::execute (this=0x64066e8, job=..., th=0x1afe200) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/job_p.cpp:58
#23 0x00007f1d1d827cdf in ThreadWeaver::ExecuteWrapper::executeWrapped (this=0x6406710, job=..., thread=0x1afe200) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:64
#24 0x00007f1d1d827c65 in ThreadWeaver::ExecuteWrapper::execute (this=0x6406710, job=..., thread=0x1afe200) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:57
#25 0x00007f1d1d827cdf in ThreadWeaver::ExecuteWrapper::executeWrapped (this=0x5d91e80, job=..., thread=0x1afe200) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:64
#26 0x00007f1d1d827c65 in ThreadWeaver::ExecuteWrapper::execute (this=0x5d91e80, job=..., thread=0x1afe200) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:57
#27 0x00007f1d1d824c35 in ThreadWeaver::Job::execute (this=0x2ff4e30, self=..., th=0x1afe200) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/job.cpp:83
#28 0x00007f1d1d82a520 in ThreadWeaver::Collection::execute (this=0x2ff4e30, job=..., thread=0x1afe200) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/collection.cpp:151
#29 0x00007f1d1d8272d9 in ThreadWeaver::IdDecorator::execute (this=0x568fad0, self=..., thread=0x1afe200) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/iddecorator.cpp:177
#30 0x00007f1d1d82425e in ThreadWeaver::Thread::run (this=0x1afe200) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/thread.cpp:114
#31 0x00007f1d223f396e in ?? () from /usr/lib/libQt5Core.so.5
#32 0x00007f1d1ad094a4 in start_thread () from /usr/lib/libpthread.so.0
#33 0x00007f1d217e713d in clone () from /usr/lib/libc.so.6

Thread 6 (Thread 0x7f1caa56a700 (LWP 25860)):
#0  0x00007f1d217b691d in nanosleep () from /usr/lib/libc.so.6
#1  0x00007f1d224a40ad in ?? () from /usr/lib/libQt5Core.so.5
#2  0x00007f1d223f2da4 in QThread::usleep(unsigned long) () from /usr/lib/libQt5Core.so.5
#3  0x00007f1d1fa7beee in KDevelop::DUChainLock::lockForWrite (this=0x7f1d2028aa10 <KDevelop::(anonymous namespace)::Q_QGS_sdDUChainPrivate::innerFunction()::holder+32>, timeout=0)
---Type <return> to continue, or q <return> to quit---
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:155
#4  0x00007f1d1fa7c298 in KDevelop::DUChainWriteLocker::lock (this=0x7f1caa568468) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:249
#5  0x00007f1d1fa7c239 in KDevelop::DUChainWriteLocker::DUChainWriteLocker (this=0x7f1caa568468, duChainLock=0x0, timeout=0)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:233
#6  0x00007f1cb55caebc in ClangHelpers::buildDUChain (file=0x7f1cb80b3d20, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:136
#7  0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1cb86694a0, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#8  0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1cb9b427a0, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#9  0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1cb9baff00, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#10 0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1cb9cbe360, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#11 0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1cb80aeab0, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#12 0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1cb804d4a0, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#13 0x00007f1cb55a3a5e in ClangParseJob::run (this=0x3301bf0) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/clangparsejob.cpp:306
#14 0x00007f1cb55a43cc in non-virtual thunk to ClangParseJob::run(QSharedPointer<ThreadWeaver::JobInterface>, ThreadWeaver::Thread*) ()
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/clangparsejob.cpp:212
#15 0x00007f1d1d826ad5 in ThreadWeaver::IdDecorator::run (this=0x3173b70, self=..., thread=0x7f1c9412bdf0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/iddecorator.cpp:69
#16 0x00007f1d1d827a32 in ThreadWeaver::Executor::run (this=0x7f1d1da44d18 <ThreadWeaver::Private::defaultExecutor>, job=..., thread=0x7f1c9412bdf0)
    at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executor.cpp:52
#17 0x00007f1d1d8265d0 in ThreadWeaver::Private::DefaultExecutor::execute (this=0x7f1d1da44d18 <ThreadWeaver::Private::defaultExecutor>, job=..., thread=0x7f1c9412bdf0)
    at /home/milian/projects/kf5/src/frameworks/threadweaver/src/job_p.cpp:70
#18 0x00007f1d1d827cdf in ThreadWeaver::ExecuteWrapper::executeWrapped (this=0x1bb7458, job=..., thread=0x7f1c9412bdf0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:64
#19 0x00007f1d1d82651c in ThreadWeaver::Private::DebugExecuteWrapper::execute (this=0x1bb7458, job=..., th=0x7f1c9412bdf0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/job_p.cpp:58
#20 0x00007f1d1d827cdf in ThreadWeaver::ExecuteWrapper::executeWrapped (this=0x1bb7480, job=..., thread=0x7f1c9412bdf0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:64
#21 0x00007f1d1d827c65 in ThreadWeaver::ExecuteWrapper::execute (this=0x1bb7480, job=..., thread=0x7f1c9412bdf0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:57
#22 0x00007f1d1d827cdf in ThreadWeaver::ExecuteWrapper::executeWrapped (this=0x2fb9000, job=..., thread=0x7f1c9412bdf0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:64
---Type <return> to continue, or q <return> to quit---
#23 0x00007f1d1d827c65 in ThreadWeaver::ExecuteWrapper::execute (this=0x2fb9000, job=..., thread=0x7f1c9412bdf0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:57
#24 0x00007f1d1d824c35 in ThreadWeaver::Job::execute (this=0x3301c00, self=..., th=0x7f1c9412bdf0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/job.cpp:83
#25 0x00007f1d1d82a520 in ThreadWeaver::Collection::execute (this=0x3301c00, job=..., thread=0x7f1c9412bdf0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/collection.cpp:151
#26 0x00007f1d1d8272d9 in ThreadWeaver::IdDecorator::execute (this=0x3173b70, self=..., thread=0x7f1c9412bdf0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/iddecorator.cpp:177
#27 0x00007f1d1d82425e in ThreadWeaver::Thread::run (this=0x7f1c9412bdf0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/thread.cpp:114
#28 0x00007f1d223f396e in ?? () from /usr/lib/libQt5Core.so.5
#29 0x00007f1d1ad094a4 in start_thread () from /usr/lib/libpthread.so.0
#30 0x00007f1d217e713d in clone () from /usr/lib/libc.so.6

Thread 4 (Thread 0x7f1ca3fff700 (LWP 25862)):
#0  0x00007f1d217e2cf9 in syscall () from /usr/lib/libc.so.6
#1  0x00007f1d223eba38 in QBasicMutex::lockInternal() () from /usr/lib/libQt5Core.so.5
#2  0x00007f1d223ebb2d in QMutex::lock() () from /usr/lib/libQt5Core.so.5
#3  0x00007f1d1f9bad01 in QMutexLocker::QMutexLocker (this=0x7f1ca3ffde80, m=0x3a406a8) at /usr/include/qt/QtCore/qmutex.h:128
#4  0x00007f1d1f9cd1d4 in KDevelop::BackgroundParser::trackerForUrl (this=0x3a414c0, url=...) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/backgroundparser/backgroundparser.cpp:742
#5  0x00007f1d1f9f807c in KDevelop::DUChain::addDocumentChain (this=0x46e4b70, chain=0x7f1c999619c0) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/duchain/duchain.cpp:1233
#6  0x00007f1cb55cb693 in (anonymous namespace)::createTopContext (path=..., environment=...) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:89
---Type <return> to continue, or q <return> to quit---
#7  0x00007f1cb55caf4c in ClangHelpers::buildDUChain (file=0x7f1c71157480, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:139
#8  0x00007f1cb55cad40 in ClangHelpers::buildDUChain (file=0x7f1c8846d980, imports=..., session=..., features=KDevelop::TopDUContext::Features::AllDeclarationsContextsAndUses, includedFiles=..., index=0x4da6740)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/duchain/clanghelpers.cpp:121
#9  0x00007f1cb55a3a5e in ClangParseJob::run (this=0x1e238c0) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/clangparsejob.cpp:306
#10 0x00007f1cb55a43cc in non-virtual thunk to ClangParseJob::run(QSharedPointer<ThreadWeaver::JobInterface>, ThreadWeaver::Thread*) ()
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/languages/clang/clangparsejob.cpp:212
#11 0x00007f1d1d826ad5 in ThreadWeaver::IdDecorator::run (this=0x3074910, self=..., thread=0x7f1cf80924c0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/iddecorator.cpp:69
#12 0x00007f1d1d827a32 in ThreadWeaver::Executor::run (this=0x7f1d1da44d18 <ThreadWeaver::Private::defaultExecutor>, job=..., thread=0x7f1cf80924c0)
    at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executor.cpp:52
#13 0x00007f1d1d8265d0 in ThreadWeaver::Private::DefaultExecutor::execute (this=0x7f1d1da44d18 <ThreadWeaver::Private::defaultExecutor>, job=..., thread=0x7f1cf80924c0)
    at /home/milian/projects/kf5/src/frameworks/threadweaver/src/job_p.cpp:70
#14 0x00007f1d1d827cdf in ThreadWeaver::ExecuteWrapper::executeWrapped (this=0x3a4ad78, job=..., thread=0x7f1cf80924c0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:64
#15 0x00007f1d1d82651c in ThreadWeaver::Private::DebugExecuteWrapper::execute (this=0x3a4ad78, job=..., th=0x7f1cf80924c0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/job_p.cpp:58
#16 0x00007f1d1d827cdf in ThreadWeaver::ExecuteWrapper::executeWrapped (this=0x3a4ada0, job=..., thread=0x7f1cf80924c0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:64
#17 0x00007f1d1d827c65 in ThreadWeaver::ExecuteWrapper::execute (this=0x3a4ada0, job=..., thread=0x7f1cf80924c0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:57
#18 0x00007f1d1d827cdf in ThreadWeaver::ExecuteWrapper::executeWrapped (this=0x1bb0c30, job=..., thread=0x7f1cf80924c0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:64
#19 0x00007f1d1d827c65 in ThreadWeaver::ExecuteWrapper::execute (this=0x1bb0c30, job=..., thread=0x7f1cf80924c0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/executewrapper.cpp:57
#20 0x00007f1d1d824c35 in ThreadWeaver::Job::execute (this=0x1e238d0, self=..., th=0x7f1cf80924c0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/job.cpp:83
#21 0x00007f1d1d82a520 in ThreadWeaver::Collection::execute (this=0x1e238d0, job=..., thread=0x7f1cf80924c0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/collection.cpp:151
#22 0x00007f1d1d8272d9 in ThreadWeaver::IdDecorator::execute (this=0x3074910, self=..., thread=0x7f1cf80924c0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/iddecorator.cpp:177
#23 0x00007f1d1d82425e in ThreadWeaver::Thread::run (this=0x7f1cf80924c0) at /home/milian/projects/kf5/src/frameworks/threadweaver/src/thread.cpp:114
#24 0x00007f1d223f396e in ?? () from /usr/lib/libQt5Core.so.5
#25 0x00007f1d1ad094a4 in start_thread () from /usr/lib/libpthread.so.0
#26 0x00007f1d217e713d in clone () from /usr/lib/libc.so.6

Thread 1 (Thread 0x7f1d29d14840 (LWP 25510)):
#0  0x00007f1d217b691d in nanosleep () from /usr/lib/libc.so.6
#1  0x00007f1d224a40ad in ?? () from /usr/lib/libQt5Core.so.5
#2  0x00007f1d223f2da4 in QThread::usleep(unsigned long) () from /usr/lib/libQt5Core.so.5
---Type <return> to continue, or q <return> to quit---
#3  0x00007f1d1fa7bc8a in KDevelop::DUChainLock::lockForRead (this=0x7f1d2028aa10 <KDevelop::(anonymous namespace)::Q_QGS_sdDUChainPrivate::innerFunction()::holder+32>, timeout=0)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:100
#4  0x00007f1d1fa7c0e8 in KDevelop::DUChainReadLocker::lock (this=0x7ffc59ab7900) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:211
#5  0x00007f1d1fa7c089 in KDevelop::DUChainReadLocker::DUChainReadLocker (this=0x7ffc59ab7900, duChainLock=0x7f1d2028aa10 <KDevelop::(anonymous namespace)::Q_QGS_sdDUChainPrivate::innerFunction()::holder+32>, 
    timeout=0) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:190
#6  0x00007f1cb6cb253b in ContextBrowserView::showEvent (this=0x5b6b070, event=0x7ffc59ab7c50) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/plugins/contextbrowser/contextbrowserview.cpp:189
#7  0x00007f1d236a7038 in QWidget::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
#8  0x00007f1cb6cb2505 in ContextBrowserView::event (this=0x5b6b070, event=0x7ffc59ab7c50) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/plugins/contextbrowser/contextbrowserview.cpp:185
#9  0x00007f1d2366401c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#10 0x00007f1d236694f6 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#11 0x00007f1d225d49ab in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#12 0x00007f1d236a3b46 in QWidgetPrivate::show_helper() () from /usr/lib/libQt5Widgets.so.5
#13 0x00007f1d236a3836 in QWidgetPrivate::showChildren(bool) () from /usr/lib/libQt5Widgets.so.5
#14 0x00007f1d236a38cf in QWidgetPrivate::show_helper() () from /usr/lib/libQt5Widgets.so.5
#15 0x00007f1d236a66c5 in QWidget::setVisible(bool) () from /usr/lib/libQt5Widgets.so.5
#16 0x00007f1d237917e8 in ?? () from /usr/lib/libQt5Widgets.so.5
#17 0x00007f1d237925c1 in QDockWidget::setFloating(bool) () from /usr/lib/libQt5Widgets.so.5
#18 0x00007f1d237a0565 in ?? () from /usr/lib/libQt5Widgets.so.5
#19 0x00007f1d237a0849 in ?? () from /usr/lib/libQt5Widgets.so.5
#20 0x00007f1d237c1d4a in ?? () from /usr/lib/libQt5Widgets.so.5
#21 0x00007f1d237c3411 in ?? () from /usr/lib/libQt5Widgets.so.5
#22 0x00007f1d237bc35d in QMainWindow::restoreState(QByteArray const&, int) () from /usr/lib/libQt5Widgets.so.5
#23 0x00007f1d26c5d243 in KMainWindow::applyMainWindowSettings (this=0x1c745a0, cg=...) at /home/milian/projects/kf5/src/frameworks/kxmlgui/src/kmainwindow.cpp:676
#24 0x00007f1d26ca4e74 in KXmlGuiWindow::applyMainWindowSettings (this=0x1c745a0, config=...) at /home/milian/projects/kf5/src/frameworks/kxmlgui/src/kxmlguiwindow.cpp:374
#25 0x00007f1d2986e5c9 in KDevelop::MainWindow::applyMainWindowSettings (this=0x1c745a0, config=...) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/shell/mainwindow.cpp:93
#26 0x00007f1d26ca4e2a in KXmlGuiWindow::finalizeGUI (this=0x1c745a0) at /home/milian/projects/kf5/src/frameworks/kxmlgui/src/kxmlguiwindow.cpp:367
#27 0x00007f1d26c8aac2 in KXMLGUIBuilder::finalizeGUI (this=0x1c745d8) at /home/milian/projects/kf5/src/frameworks/kxmlgui/src/kxmlguibuilder.cpp:415
#28 0x00007f1d26ca4f3c in KXmlGuiWindow::finalizeGUI (this=0x1c745a0, client=0x568f110) at /home/milian/projects/kf5/src/frameworks/kxmlgui/src/kxmlguiwindow.cpp:385
#29 0x00007f1d26ca4f7c in non-virtual thunk to KXmlGuiWindow::finalizeGUI(KXMLGUIClient*) () at /home/milian/projects/kf5/src/frameworks/kxmlgui/src/kxmlguiwindow.cpp:383
#30 0x00007f1d26c91ac1 in KXMLGUIFactory::addClient (this=0x1b6b950, client=0x568f110) at /home/milian/projects/kf5/src/frameworks/kxmlgui/src/kxmlguifactory.cpp:301
#31 0x00007f1d29877d5f in KDevelop::MainWindowPrivate::addPlugin (this=0x1d96930, plugin=0x568f100) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/shell/mainwindow_p.cpp:96
---Type <return> to continue, or q <return> to quit---
#32 0x00007f1d29875f65 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<KDevelop::IPlugin*>, void, void (KDevelop::MainWindowPrivate::*)(KDevelop::IPlugin*)>::call (f=
    (void (KDevelop::MainWindowPrivate::*)(KDevelop::MainWindowPrivate * const, KDevelop::IPlugin *)) 0x7f1d29877b90 <KDevelop::MainWindowPrivate::addPlugin(KDevelop::IPlugin*)>, o=0x1d96930, arg=0x7ffc59ab8b20)
    at /usr/include/qt/QtCore/qobjectdefs_impl.h:501
#33 0x00007f1d29875ed0 in QtPrivate::FunctionPointer<void (KDevelop::MainWindowPrivate::*)(KDevelop::IPlugin*)>::call<QtPrivate::List<KDevelop::IPlugin*>, void> (f=
    (void (KDevelop::MainWindowPrivate::*)(KDevelop::MainWindowPrivate * const, KDevelop::IPlugin *)) 0x7f1d29877b90 <KDevelop::MainWindowPrivate::addPlugin(KDevelop::IPlugin*)>, o=0x1d96930, arg=0x7ffc59ab8b20)
    at /usr/include/qt/QtCore/qobjectdefs_impl.h:520
#34 0x00007f1d29875e06 in QtPrivate::QSlotObject<void (KDevelop::MainWindowPrivate::*)(KDevelop::IPlugin*), QtPrivate::List<KDevelop::IPlugin*>, void>::impl (which=1, this_=0x1dd9fa0, r=0x1d96930, 
    a=0x7ffc59ab8b20, ret=0x0) at /usr/include/qt/QtCore/qobject_impl.h:143
#35 0x00007f1d22602fb7 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5
#36 0x00007f1d2793d23f in KDevelop::IPluginController::pluginLoaded (this=0x1cdb780, _t1=0x568f100) at /home/milian/projects/kf5/build/extragear/kdevelop/kdevplatform/interfaces/moc_iplugincontroller.cpp:231
#37 0x00007f1d298819c8 in KDevelop::PluginController::loadPluginInternal (this=0x1cdb780, pluginId=...) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/shell/plugincontroller.cpp:551
#38 0x00007f1d298863ff in KDevelop::PluginController::allPluginsForExtension(QString const&, QMap<QString, QVariant> const&)::$_5::operator()(KPluginMetaData const&) const (this=0x7ffc59ab90f0, info=...)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/shell/plugincontroller.cpp:631
#39 0x00007f1d29883bb8 in KDevelop::PluginControllerPrivate::foreachEnabledPlugin<KDevelop::PluginController::allPluginsForExtension(QString const&, QMap<QString, QVariant> const&)::$_5>(KDevelop::PluginController::allPluginsForExtension(QString const&, QMap<QString, QVariant> const&)::$_5, QString const&, QMap<QString, QVariant> const&, QString const&) (this=0x32ffe80, func=..., extension=..., constraints=..., 
    pluginName=...) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/shell/plugincontroller.cpp:220
#40 0x00007f1d2988392e in KDevelop::PluginController::allPluginsForExtension (this=0x1cdb780, extension=..., constraints=...)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/shell/plugincontroller.cpp:628
#41 0x00007f1d298dda29 in KDevelop::LanguageController::languagesForMimetype (this=0x3a479b0, mimetype=...) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/shell/languagecontroller.cpp:354
#42 0x00007f1d298dd80b in KDevelop::LanguageController::languagesForUrl (this=0x3a479b0, url=...) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/shell/languagecontroller.cpp:334
#43 0x00007f1d1f9d25c0 in KDevelop::BackgroundParserPrivate::createParseJob (this=0x3a40600, url=..., features=KDevelop::TopDUContext::Features::SimplifiedVisibleDeclarationsAndContexts, notifyWhenReady=..., 
    priority=10000) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/backgroundparser/backgroundparser.cpp:264
#44 0x00007f1d1f9cf331 in KDevelop::BackgroundParserPrivate::parseDocumentsInternal (this=0x3a40600)
    at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/backgroundparser/backgroundparser.cpp:205
#45 0x00007f1d1f9cc6e2 in KDevelop::BackgroundParser::parseDocuments (this=0x3a414c0) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevplatform/language/backgroundparser/backgroundparser.cpp:596
#46 0x00007f1d1fbb939c in KDevelop::BackgroundParser::qt_static_metacall (_o=0x3a414c0, _c=QMetaObject::InvokeMetaMethod, _id=17, _a=0x1b3fb40)
    at /home/milian/projects/kf5/build/extragear/kdevelop/kdevplatform/language/moc_backgroundparser.cpp:259
#47 0x00007f1d22603ff1 in QObject::event(QEvent*) () from /usr/lib/libQt5Core.so.5
#48 0x00007f1d2366401c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#49 0x00007f1d236694f6 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#50 0x00007f1d225d49ab in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
---Type <return> to continue, or q <return> to quit---
#51 0x00007f1d225d6da6 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQt5Core.so.5
#52 0x00007f1d2262af43 in ?? () from /usr/lib/libQt5Core.so.5
#53 0x00007f1d188b0dc7 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#54 0x00007f1d188b1020 in ?? () from /usr/lib/libglib-2.0.so.0
#55 0x00007f1d188b10cc in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#56 0x00007f1d2262b34f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#57 0x00007f1d225d237a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#58 0x00007f1d225da33c in QCoreApplication::exec() () from /usr/lib/libQt5Core.so.5
#59 0x00000000004163c3 in main (argc=3, argv=0x7ffc59abc048) at /home/milian/projects/kf5/src/extragear/kdevelop/kdevelop/app/main.cpp:646

Reproducible: Sometimes

Steps to Reproduce:
thread 1:
- parseDocuments() locks m_mutex of background parser
- a plugin gets loaded, and eventually the duchain is locked as well

thread 2:
- the duchain is locked
- the background parser is asked for a tracker, which needs to lock the m_mutex again

=> lock order inversion, leading to deadlock.



Actual Results:  
deadlock

Expected Results:  
no deadlock

should be "easy" to create a test for this with a fake parsejob:

- repeatedly lock the duchain in the ctor of the job
- repeatedly ask for backgroundparser data from the run method
Comment 1 Milian Wolff 2015-11-14 17:36:07 UTC
*** Bug 319829 has been marked as a duplicate of this bug. ***
Comment 2 Kevin Funk 2016-01-28 15:42:42 UTC
Git commit e4c26c563231fea20898c1f3a9743b178df9fd39 by Kevin Funk.
Committed on 28/01/2016 at 15:41.
Pushed by kfunk into branch '5.0'.

ContextBrowserView: Fix deadlock

This happens everytime the context browser view is open at startup, and
KDevelop's background parser starts jobs.

Arguably, we should never block indefinitely in a non-user initiated event (here:
QWidget::showEvent). So let's give up after a timeout.

Differential Revision: https://phabricator.kde.org/D866

M  +8    -2    plugins/contextbrowser/contextbrowserview.cpp

http://commits.kde.org/kdevplatform/e4c26c563231fea20898c1f3a9743b178df9fd39
Comment 3 Kevin Funk 2016-03-10 11:18:11 UTC
@Milian: Do you still consider this a release blocker? I never got into this deadlock again, after my fix.
Comment 4 Milian Wolff 2016-03-10 21:24:55 UTC
No, not a release blocker, but still potentially broken. We should try to fix this in the long run somehow. So let's keep it open.
Comment 5 Milian Wolff 2016-09-05 21:21:32 UTC
*** Bug 367825 has been marked as a duplicate of this bug. ***
Comment 6 Milian Wolff 2016-09-06 11:16:43 UTC
Git commit 64f72d3fad28261f97cff6837526d69f6bb72837 by Milian Wolff.
Committed on 06/09/2016 at 11:16.
Pushed by mwolff into branch '5.0'.

Add test to trigger deadlock in BackgroundParser.

To run it, use:

$ TEST_BUG_355100=1 ./test_backgroundparser testNoDeadlockInJobCreation

Otherwise, we'll skip the deadlock to prevent issues on the CI.

M  +66   -4    language/backgroundparser/tests/test_backgroundparser.cpp
M  +3    -0    language/backgroundparser/tests/test_backgroundparser.h
M  +5    -1    language/backgroundparser/tests/testlanguagesupport.cpp
M  +1    -0    language/backgroundparser/tests/testlanguagesupport.h
M  +5    -1    language/backgroundparser/tests/testparsejob.cpp
M  +3    -0    language/backgroundparser/tests/testparsejob.h

http://commits.kde.org/kdevplatform/64f72d3fad28261f97cff6837526d69f6bb72837
Comment 7 Milian Wolff 2016-09-06 20:56:57 UTC
Git commit 8c46e8e765857b9e4d09b78c6896100dc150f964 by Milian Wolff.
Committed on 06/09/2016 at 20:17.
Pushed by mwolff into branch '5.0'.

Release the background parser lock while creating parse jobs.

This fixes a deadlock due to lock order inversion. We often elsewhere
access the background parser while holding the DUChain lock. Here,
we used to lock the background parser and then potentially locked the
DUChain. This was desastrous.

The patch here now unlocks the background parser while creating the
parse job, and relocks it again to insert the job into its internal
data structurs.

Because the background parser only ever creats jobs from the main
thread, and only one at most, this is safe to do.

M  +16   -1    language/backgroundparser/backgroundparser.cpp
M  +0    -4    language/backgroundparser/tests/test_backgroundparser.cpp

http://commits.kde.org/kdevplatform/8c46e8e765857b9e4d09b78c6896100dc150f964
Comment 8 Milian Wolff 2016-09-21 09:56:28 UTC
*** Bug 368375 has been marked as a duplicate of this bug. ***