CodeCompletion sometimes slow during initial parsing: clearImportedContextsRecursively

Niko Sams niko.sams at gmail.com
Wed Nov 20 20:47:41 UTC 2013


Hi there,

It's been quite some time since I worked on kdevelop, but I still use
it for my php development.
And, my recent motivation is to get my working colleges, who are
switching to phpstorm, back to kdevelop :D

One big issue I'm trying to fix is a performance issue during initial
parsing on startup.
If I use code completion while parsing (a fairly large project) is
still running, I sometimes hit this issue - see backtrace.

output shows the following before I hit Ctrl+C:
Php::ContextBuilder::build: re-compiling "some random, not extra large
or something file .php"
Php::NormalDeclarationCompletionItem::data: Failed to lock the du-chain in time
Php::NormalDeclarationCompletionItem::data: Failed to lock the du-chain in time

Any idea what could cause this?

cheers,
Niko

Thread 18 (Thread 0x7ffee6ffb700 (LWP 20833)):
#0  0x00007ffff376f03f in pthread_cond_wait@@GLIBC_2.3.2 () from
/usr/lib/libpthread.so.0
#1  0x00007ffff39fc266 in QWaitCondition::wait(QMutex*, unsigned long)
() from /usr/lib/libQtCore.so.4
#2  0x00007ffff63a5c0c in ?? () from /usr/lib/libthreadweaver.so.4
#3  0x00007ffff63a86a3 in ?? () from /usr/lib/libthreadweaver.so.4
#4  0x00007ffff63a86bc in ?? () from /usr/lib/libthreadweaver.so.4
#5  0x00007ffff63a73bf in ThreadWeaver::Thread::run() () from
/usr/lib/libthreadweaver.so.4
#6  0x00007ffff39fbd8f in ?? () from /usr/lib/libQtCore.so.4
#7  0x00007ffff376b0a2 in start_thread () from /usr/lib/libpthread.so.0
#8  0x00007ffff1b3c43d in clone () from /usr/lib/libc.so.6

Thread 17 (Thread 0x7ffee77fc700 (LWP 20832)):
#0  0x00007ffff00f8280 in KDevelop::ItemRepository<Utils::SetNodeData,
Utils::SetNodeDataRequest, false, false, 24u, 1048576u>::deleteItem (
    this=0x7ffff03d0310
<KDevelop::RecursiveImportRepository::repository()::recursiveImportRepositoryObject+16>,
index=1940898)
    at /home/niko/kdesvn/kdevelop/kdevplatform/language/duchain/repositories/itemrepository.h:1435
#1  0x00007ffff00f5f75 in Utils::Set::unrefNode (this=0x7ffee77fb080,
current=1940898) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/util/setrepository.cpp:1087
#2  0x00007ffff00f5f0f in Utils::Set::unrefNode (this=0x7ffee77fb080,
current=948732) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/util/setrepository.cpp:1079
#3  0x00007ffff00f5f2b in Utils::Set::unrefNode (this=0x7ffee77fb080,
current=1902184) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/util/setrepository.cpp:1080
#4  0x00007ffff00f5f0f in Utils::Set::unrefNode (this=0x7ffee77fb080,
current=1760878) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/util/setrepository.cpp:1079
#5  0x00007ffff00f5f0f in Utils::Set::unrefNode (this=0x7ffee77fb080,
current=1716288) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/util/setrepository.cpp:1079
#6  0x00007ffff00f5f2b in Utils::Set::unrefNode (this=0x7ffee77fb080,
current=1769172) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/util/setrepository.cpp:1080
#7  0x00007ffff00f5f2b in Utils::Set::unrefNode (this=0x7ffee77fb080,
current=1786582) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/util/setrepository.cpp:1080
#8  0x00007ffff00f5fc4 in Utils::Set::staticUnref
(this=0x7ffee77fb080) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/util/setrepository.cpp:1101
#9  0x00007fffeffe2ec1 in
Utils::StorableSet<KDevelop::IndexedTopDUContext,
KDevelop::IndexedTopDUContextIndexConversion,
KDevelop::RecursiveImportRepository, true,
Utils::DummyLocker>::insertIndex (
    this=0x7ffedaab6050, index=1741) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/util/setrepository.h:195
#10 0x00007fffeffe1250 in
Utils::StorableSet<KDevelop::IndexedTopDUContext,
KDevelop::IndexedTopDUContextIndexConversion,
KDevelop::RecursiveImportRepository, true, Utils::DummyLocker>::insert
(
---Type <return> to continue, or q <return> to quit---
    this=0x7ffedaab6050, t=...) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/util/setrepository.h:171
#11 0x00007fffeffdfd1e in
KDevelop::TopDUContextLocalPrivate::addImportedContextRecursion
(this=0x7ffedaab6000, traceNext=0x7ffeda66f6d0,
imported=0x7ffee0b334f0, depth=11, temporary=false)
    at /home/niko/kdesvn/kdevelop/kdevplatform/language/duchain/topducontext.cpp:333
#12 0x00007fffeffdfdeb in
KDevelop::TopDUContextLocalPrivate::addImportedContextRecursion
(this=0x7ffeda6734b0, traceNext=0x7ffeda9961e0,
imported=0x7ffee0b334f0, depth=10, temporary=false)
    at /home/niko/kdesvn/kdevelop/kdevplatform/language/duchain/topducontext.cpp:364
#13 0x00007fffeffdbd99 in
KDevelop::TopDUContextLocalPrivate::rebuildStructure
(this=0x7ffeda6734b0, imported=0x7ffee0b334f0)
    at /home/niko/kdesvn/kdevelop/kdevplatform/language/duchain/topducontext.cpp:572
#14 0x00007fffeffe00c8 in
KDevelop::TopDUContextLocalPrivate::rebuildImportStructureRecursion
(this=0x7ffedacff230, rebuild=...)
    at /home/niko/kdesvn/kdevelop/kdevplatform/language/duchain/topducontext.cpp:413
#15 0x00007fffeffdf0d6 in
KDevelop::TopDUContextLocalPrivate::clearImportedContextsRecursively
(this=0x7ffedacff230) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/duchain/topducontext.cpp:219
#16 0x00007fffeffdd07a in
KDevelop::TopDUContext::clearImportedParentContexts
(this=0x7ffedace9d30) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/duchain/topducontext.cpp:1109
#17 0x00007fff4b45f11b in Php::ContextBuilder::build
(this=0x7ffee77fb610, url=..., node=0x7ffee299e630, updateContext=...)
at /home/niko/kdesvn/kdevelop/kdev-php/duchain/builders/contextbuilder.cpp:80
#18 0x00007fff4b451589 in Php::DeclarationBuilder::build
(this=0x7ffee77fb7f0, url=..., node=0x7ffee299e630, updateContext=...)
    at /home/niko/kdesvn/kdevelop/kdev-php/duchain/builders/declarationbuilder.cpp:132
#19 0x00007fff4b6d9165 in Php::ParseJob::run (this=0x5eb1d80) at
/home/niko/kdesvn/kdevelop/kdev-php/phpparsejob.cpp:132
#20 0x00007ffff63a7a52 in ?? () from /usr/lib/libthreadweaver.so.4
#21 0x00007ffff63a7c0e in
ThreadWeaver::Job::execute(ThreadWeaver::Thread*) () from
/usr/lib/libthreadweaver.so.4
#22 0x00007ffff63a745b in ThreadWeaver::Thread::run() () from
/usr/lib/libthreadweaver.so.4
#23 0x00007ffff39fbd8f in ?? () from /usr/lib/libQtCore.so.4
#24 0x00007ffff376b0a2 in start_thread () from /usr/lib/libpthread.so.0
#25 0x00007ffff1b3c43d in clone () from /usr/lib/libc.so.6

Thread 16 (Thread 0x7ffee7ffd700 (LWP 20831)):
#0  0x00007ffff1b3396d in poll () from /usr/lib/libc.so.6
#1  0x00007fffec3dd084 in ?? () from /usr/lib/libglib-2.0.so.0
#2  0x00007fffec3dd18c in g_main_context_iteration () from
/usr/lib/libglib-2.0.so.0
#3  0x00007ffff3b28b46 in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
() from /usr/lib/libQtCore.so.4
---Type <return> to continue, or q <return> to quit---
#4  0x00007ffff3afab1f in
QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
from /usr/lib/libQtCore.so.4
#5  0x00007ffff3afae15 in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from
/usr/lib/libQtCore.so.4
#6  0x00007ffff39f96ef in QThread::exec() () from /usr/lib/libQtCore.so.4
#7  0x00007ffff39fbd8f in ?? () from /usr/lib/libQtCore.so.4
#8  0x00007ffff376b0a2 in start_thread () from /usr/lib/libpthread.so.0
#9  0x00007ffff1b3c43d in clone () from /usr/lib/libc.so.6

Thread 15 (Thread 0x7fff36340700 (LWP 20830)):
#0  0x00007ffff376f03f in pthread_cond_wait@@GLIBC_2.3.2 () from
/usr/lib/libpthread.so.0
#1  0x00007fffea5979cd in ?? () from /usr/lib/libQtWebKit.so.4
#2  0x00007fffea8856b6 in ?? () from /usr/lib/libQtWebKit.so.4
#3  0x00007ffff376b0a2 in start_thread () from /usr/lib/libpthread.so.0
#4  0x00007ffff1b3c43d in clone () from /usr/lib/libc.so.6

Thread 14 (Thread 0x7fff3533e700 (LWP 20829)):
#0  0x00007ffff376f03f in pthread_cond_wait@@GLIBC_2.3.2 () from
/usr/lib/libpthread.so.0
#1  0x00007fffea855f1d in ?? () from /usr/lib/libQtWebKit.so.4
#2  0x00007fffea855f59 in ?? () from /usr/lib/libQtWebKit.so.4
#3  0x00007ffff376b0a2 in start_thread () from /usr/lib/libpthread.so.0
#4  0x00007ffff1b3c43d in clone () from /usr/lib/libc.so.6

Thread 11 (Thread 0x7fff35b3f700 (LWP 20815)):
#0  0x00007ffff1b3396d in poll () from /usr/lib/libc.so.6
#1  0x00007fffec3dd084 in ?? () from /usr/lib/libglib-2.0.so.0
#2  0x00007fffec3dd18c in g_main_context_iteration () from
/usr/lib/libglib-2.0.so.0
#3  0x00007ffff3b28b46 in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
() from /usr/lib/libQtCore.so.4
#4  0x00007ffff3afab1f in
QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
from /usr/lib/libQtCore.so.4
---Type <return> to continue, or q <return> to quit---
#5  0x00007ffff3afae15 in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from
/usr/lib/libQtCore.so.4
#6  0x00007ffff39f96ef in QThread::exec() () from /usr/lib/libQtCore.so.4
#7  0x00007ffff3adc2c3 in ?? () from /usr/lib/libQtCore.so.4
#8  0x00007ffff39fbd8f in ?? () from /usr/lib/libQtCore.so.4
#9  0x00007ffff376b0a2 in start_thread () from /usr/lib/libpthread.so.0
#10 0x00007ffff1b3c43d in clone () from /usr/lib/libc.so.6

Thread 6 (Thread 0x7fff48cf3700 (LWP 20799)):
#0  0x00007ffff1b355e3 in select () from /usr/lib/libc.so.6
#1  0x00007ffff3ad9013 in ?? () from /usr/lib/libQtCore.so.4
#2  0x00007ffff39fbd8f in ?? () from /usr/lib/libQtCore.so.4
#3  0x00007ffff376b0a2 in start_thread () from /usr/lib/libpthread.so.0
#4  0x00007ffff1b3c43d in clone () from /usr/lib/libc.so.6

Thread 5 (Thread 0x7fff494f4700 (LWP 20798)):
#0  0x00007ffff1b3396d in poll () from /usr/lib/libc.so.6
#1  0x00007fffec3dd084 in ?? () from /usr/lib/libglib-2.0.so.0
#2  0x00007fffec3dd18c in g_main_context_iteration () from
/usr/lib/libglib-2.0.so.0
#3  0x00007ffff3b28b25 in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
() from /usr/lib/libQtCore.so.4
#4  0x00007ffff3afab1f in
QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
from /usr/lib/libQtCore.so.4
#5  0x00007ffff3afae15 in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from
/usr/lib/libQtCore.so.4
#6  0x00007ffff39f96ef in QThread::exec() () from /usr/lib/libQtCore.so.4
#7  0x00007ffff39fbd8f in ?? () from /usr/lib/libQtCore.so.4
#8  0x00007ffff376b0a2 in start_thread () from /usr/lib/libpthread.so.0
#9  0x00007ffff1b3c43d in clone () from /usr/lib/libc.so.6

Thread 4 (Thread 0x7fff4af7d700 (LWP 20797)):
---Type <return> to continue, or q <return> to quit---
#0  0x00007ffff1b3396d in poll () from /usr/lib/libc.so.6
#1  0x00007fffec3dd084 in ?? () from /usr/lib/libglib-2.0.so.0
#2  0x00007fffec3dd18c in g_main_context_iteration () from
/usr/lib/libglib-2.0.so.0
#3  0x00007ffff3b28b25 in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
() from /usr/lib/libQtCore.so.4
#4  0x00007ffff3afab1f in
QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
from /usr/lib/libQtCore.so.4
#5  0x00007ffff3afae15 in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from
/usr/lib/libQtCore.so.4
#6  0x00007ffff39f96ef in QThread::exec() () from /usr/lib/libQtCore.so.4
#7  0x00007ffff00bf88f in KDevelop::CompletionWorkerThread::run
(this=0x26bc880) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/codecompletion/codecompletionmodel.cpp:84
#8  0x00007ffff39fbd8f in ?? () from /usr/lib/libQtCore.so.4
#9  0x00007ffff376b0a2 in start_thread () from /usr/lib/libpthread.so.0
#10 0x00007ffff1b3c43d in clone () from /usr/lib/libc.so.6

Thread 3 (Thread 0x7fff5a676700 (LWP 20796)):
#0  0x00007ffff376f3e8 in pthread_cond_timedwait@@GLIBC_2.3.2 () from
/usr/lib/libpthread.so.0
#1  0x00007ffff39fc244 in QWaitCondition::wait(QMutex*, unsigned long)
() from /usr/lib/libQtCore.so.4
#2  0x00007fffeff9dbca in KDevelop::DUChainPrivate::CleanupThread::run
(this=0x1d9a870) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/duchain/duchain.cpp:286
#3  0x00007ffff39fbd8f in ?? () from /usr/lib/libQtCore.so.4
#4  0x00007ffff376b0a2 in start_thread () from /usr/lib/libpthread.so.0
#5  0x00007ffff1b3c43d in clone () from /usr/lib/libc.so.6

Thread 2 (Thread 0x7fffdb921700 (LWP 20795)):
#0  0x00007ffff376f03f in pthread_cond_wait@@GLIBC_2.3.2 () from
/usr/lib/libpthread.so.0
#1  0x00007ffff0cc5fcb in ?? () from /usr/lib/libQtScript.so.4
#2  0x00007ffff0cc6009 in ?? () from /usr/lib/libQtScript.so.4
#3  0x00007ffff376b0a2 in start_thread () from /usr/lib/libpthread.so.0
#4  0x00007ffff1b3c43d in clone () from /usr/lib/libc.so.6

---Type <return> to continue, or q <return> to quit---
Thread 1 (Thread 0x7ffff7f827c0 (LWP 20791)):
#0  0x00007ffff1b0dbad in nanosleep () from /usr/lib/libc.so.6
#1  0x00007ffff1b35d04 in usleep () from /usr/lib/libc.so.6
#2  0x00007ffff00090d1 in KDevelop::DUChainLock::lockForRead
(this=0x1d99028, timeout=500) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:122
#3  0x00007ffff000951b in KDevelop::DUChainReadLocker::lock
(this=0x7fffffffb660) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:246
#4  0x00007ffff00094a6 in
KDevelop::DUChainReadLocker::DUChainReadLocker (this=0x7fffffffb660,
duChainLock=0x1d99028, timeout=500)
    at /home/niko/kdesvn/kdevelop/kdevplatform/language/duchain/duchainlock.cpp:227
#5  0x00007fff4af8c035 in Php::NormalDeclarationCompletionItem::data
(this=0x7fff440028a0, index=..., role=10, model=0x27dfa60) at
/home/niko/kdesvn/kdevelop/kdev-php/completion/item.cpp:105
#6  0x00007ffff00beb83 in KDevelop::CodeCompletionModel::data
(this=0x27dfa60, index=..., role=10) at
/home/niko/kdesvn/kdevelop/kdevplatform/language/codecompletion/codecompletionmodel.cpp:371
#7  0x00007fff4ca04336 in KateCompletionModel::data(QModelIndex
const&, int) const () from /usr/lib/libkatepartinterfaces.so.4
#8  0x00007ffff31c45db in QItemDelegate::rect(QStyleOptionViewItem
const&, QModelIndex const&, int) const () from /usr/lib/libQtGui.so.4
#9  0x00007ffff31c4e5a in QItemDelegate::sizeHint(QStyleOptionViewItem
const&, QModelIndex const&) const () from /usr/lib/libQtGui.so.4
#10 0x00007fff4ca18f53 in ?? () from /usr/lib/libkatepartinterfaces.so.4
#11 0x00007ffff3172af8 in
QAbstractItemView::sizeHintForIndex(QModelIndex const&) const () from
/usr/lib/libQtGui.so.4
#12 0x00007fff4ca082cd in ?? () from /usr/lib/libkatepartinterfaces.so.4
#13 0x00007ffff3b0fb48 in QMetaObject::activate(QObject*, QMetaObject
const*, int, void**) () from /usr/lib/libQtCore.so.4
#14 0x00007ffff3b13d11 in QObject::event(QEvent*) () from
/usr/lib/libQtCore.so.4
#15 0x00007ffff2c8212c in QApplicationPrivate::notify_helper(QObject*,
QEvent*) () from /usr/lib/libQtGui.so.4
#16 0x00007ffff2c886f0 in QApplication::notify(QObject*, QEvent*) ()
from /usr/lib/libQtGui.so.4
#17 0x00007ffff431b72a in KApplication::notify(QObject*, QEvent*) ()
from /usr/lib/libkdeui.so.5
#18 0x00007ffff3afbebd in QCoreApplication::notifyInternal(QObject*,
QEvent*) () from /usr/lib/libQtCore.so.4
#19 0x00007ffff3b2b5d3 in ?? () from /usr/lib/libQtCore.so.4
#20 0x00007ffff3b28929 in ?? () from /usr/lib/libQtCore.so.4
#21 0x00007fffec3dcd96 in g_main_context_dispatch () from
/usr/lib/libglib-2.0.so.0
#22 0x00007fffec3dd0e8 in ?? () from /usr/lib/libglib-2.0.so.0
#23 0x00007fffec3dd18c in g_main_context_iteration () from
/usr/lib/libglib-2.0.so.0
#24 0x00007ffff3b28b25 in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
() from /usr/lib/libQtCore.so.4
---Type <return> to continue, or q <return> to quit---
#25 0x00007ffff2d1f266 in ?? () from /usr/lib/libQtGui.so.4
#26 0x00007ffff3afab1f in
QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
from /usr/lib/libQtCore.so.4
#27 0x00007ffff3afae15 in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from
/usr/lib/libQtCore.so.4
#28 0x00007ffff3afff4b in QCoreApplication::exec() () from
/usr/lib/libQtCore.so.4
#29 0x0000000000412acf in main (argc=3, argv=0x7fffffffe468) at
/home/niko/kdesvn/kdevelop/kdevelop/app/main.cpp:559


More information about the KDevelop-devel mailing list