Related to bug 204332 which shows the error in the code completion which is kate-only-code. This bug also triggers, at least in kde 4.3.4 / Qt 4.5.x, when you request the context menu on the DUChain popup. Afaik I could not reproduce that with KDE 4.4.x / Qt 4.6.x. The cause for this bug should be the same, i.e. that the context menu get's the focus and hence the popup gets deleted triggering the race. Imo a quite severe bug, any ideas on how to fix it would be greatly appreciated.
Damn I cannot reproduce in valgrind (maybe because everything is too slow then...), but I bet it's the same reason as in the above mentioned kate bug. Here's the GDB bt for now: Application: KDevelop (kdevelop.bin), signal: Segmentation fault [Current thread is 1 (Thread 0xb4cbf700 (LWP 28617))] Thread 10 (Thread 0xb1956b70 (LWP 28618)): #0 0xb7856424 in __kernel_vsyscall () #1 0xb513a3d2 in pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_timedwait.S:179 #2 0xb59e6864 in __pthread_cond_timedwait (cond=0x8e38b10, mutex=0x8e38af8, abstime=0xb195630c) at forward.c:152 #3 0xb65ec59c in QWaitConditionPrivate::wait (this=0x90a9c14, mutex=0x90a9c18, time=200000) at thread/qwaitcondition_unix.cpp:85 #4 QWaitCondition::wait (this=0x90a9c14, mutex=0x90a9c18, time=200000) at thread/qwaitcondition_unix.cpp:159 #5 0xb551378e in KDevelop::DUChainPrivate::CleanupThread::run (this=0x90a9c08) at /home/milianw/projects/kde4/kdevplatform/language/duchain/duchain.cpp:286 #6 0xb65eb5e2 in QThreadPrivate::start (arg=0x90a9c08) at thread/qthread_unix.cpp:188 #7 0xb5136585 in start_thread (arg=0xb1956b70) at pthread_create.c:300 #8 0xb59d929e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 Thread 9 (Thread 0xb0632b70 (LWP 28619)): #0 0xb7856424 in __kernel_vsyscall () #1 0xb513a0a5 in pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_wait.S:122 #2 0xb59e680d in __pthread_cond_wait (cond=0x91e8ce8, mutex=0x91e8cd0) at forward.c:139 #3 0xb65ec5c2 in QWaitConditionPrivate::wait (this=0x91e1070, mutex=0x91e5b90, time=4294967295) at thread/qwaitcondition_unix.cpp:87 #4 QWaitCondition::wait (this=0x91e1070, mutex=0x91e5b90, time=4294967295) at thread/qwaitcondition_unix.cpp:159 #5 0xb715eb10 in ThreadWeaver::WeaverImpl::blockThreadUntilJobsAreBeingAssigned (this=0x91e1058, th=0x91d1f10) at ../../../threadweaver/Weaver/WeaverImpl.cpp:365 #6 0xb71610cc in ThreadWeaver::WorkingHardState::waitForAvailableJob (this=0x91d1400, th=0x91d1f10) at ../../../threadweaver/Weaver/WorkingHardState.cpp:80 #7 0xb715d1db in ThreadWeaver::WeaverImpl::waitForAvailableJob (this=0x91e1058, th=0x91d1f10) at ../../../threadweaver/Weaver/WeaverImpl.cpp:356 #8 0xb71611c2 in ThreadWeaver::WorkingHardState::applyForWork (this=0x91d1400, th=0x91d1f10) at ../../../threadweaver/Weaver/WorkingHardState.cpp:71 #9 0xb715ed93 in ThreadWeaver::WeaverImpl::applyForWork (this=0x91e1058, th=0x91d1f10, previous=0x91ef728) at ../../../threadweaver/Weaver/WeaverImpl.cpp:351 #10 0xb715f39e in ThreadWeaver::ThreadRunHelper::run (this=0xb0632324, parent=0x91e1058, th=0x91d1f10) at ../../../threadweaver/Weaver/Thread.cpp:87 #11 0xb715fabb in ThreadWeaver::Thread::run (this=0x91d1f10) at ../../../threadweaver/Weaver/Thread.cpp:142 #12 0xb65eb5e2 in QThreadPrivate::start (arg=0x91d1f10) at thread/qthread_unix.cpp:188 #13 0xb5136585 in start_thread (arg=0xb0632b70) at pthread_create.c:300 #14 0xb59d929e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 Thread 8 (Thread 0xafe31b70 (LWP 28620)): #0 0xb7856424 in __kernel_vsyscall () #1 0xb513a3d2 in pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_timedwait.S:179 #2 0xb59e6864 in __pthread_cond_timedwait (cond=0x91f3c90, mutex=0x91f3c78, abstime=0xafe312ac) at forward.c:152 #3 0xb65ec59c in QWaitConditionPrivate::wait (this=0x91f3be0, mutex=0x91f3bdc, time=30000) at thread/qwaitcondition_unix.cpp:85 #4 QWaitCondition::wait (this=0x91f3be0, mutex=0x91f3bdc, time=30000) at thread/qwaitcondition_unix.cpp:159 #5 0xb65e1d7e in QThreadPoolThread::run (this=0x91f3d28) at concurrent/qthreadpool.cpp:140 #6 0xb65eb5e2 in QThreadPrivate::start (arg=0x91f3d28) at thread/qthread_unix.cpp:188 #7 0xb5136585 in start_thread (arg=0xafe31b70) at pthread_create.c:300 #8 0xb59d929e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 Thread 7 (Thread 0xad27fb70 (LWP 28790)): #0 0xb7856424 in __kernel_vsyscall () #1 0xb59cbb27 in *__GI___poll (fds=0xb1003728, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:87 #2 0xb508104b in g_poll () from /lib/libglib-2.0.so.0 #3 0xb507420b in ?? () from /lib/libglib-2.0.so.0 #4 0xb5074503 in g_main_context_iteration () from /lib/libglib-2.0.so.0 #5 0xb670705f in QEventDispatcherGlib::processEvents (this=0x94fd5d8, flags=...) at kernel/qeventdispatcher_glib.cpp:409 #6 0xb66da83a in QEventLoop::processEvents (this=0xad27f2f0, flags=...) at kernel/qeventloop.cpp:149 #7 0xb66dac82 in QEventLoop::exec (this=0xad27f2f0, flags=...) at kernel/qeventloop.cpp:201 #8 0xb65e8309 in QThread::exec (this=0x964b938) at thread/qthread.cpp:487 #9 0xb5626059 in KDevelop::CompletionWorkerThread::run (this=0x964b938) at /home/milianw/projects/kde4/kdevplatform/language/codecompletion/codecompletionmodel.cpp:82 #10 0xb65eb5e2 in QThreadPrivate::start (arg=0x964b938) at thread/qthread_unix.cpp:188 #11 0xb5136585 in start_thread (arg=0xad27fb70) at pthread_create.c:300 #12 0xb59d929e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 Thread 6 (Thread 0xada80b70 (LWP 28791)): #0 0xb50f0e4c in *__GI_clock_gettime (clock_id=-1257287692, tp=0xada80048) at ../sysdeps/unix/clock_gettime.c:100 #1 0xb6708e9b in QTimerInfoList::getTime (this=0xaed416bc, t=...) at kernel/qeventdispatcher_unix.cpp:339 #2 0xb6709061 in QTimerInfoList::updateCurrentTime (this=0xaed416bc) at kernel/qeventdispatcher_unix.cpp:297 #3 0xb670921a in QTimerInfoList::timerWait (this=0xaed416bc, tm=...) at kernel/qeventdispatcher_unix.cpp:420 #4 0xb6707220 in timerSourcePrepareHelper (src=0xada80048, timeout=0xada8014c) at kernel/qeventdispatcher_glib.cpp:136 #5 0xb67072a5 in timerSourcePrepare (source=0x0, timeout=0xb50f4ff4) at kernel/qeventdispatcher_glib.cpp:169 #6 0xb5073c30 in g_main_context_prepare () from /lib/libglib-2.0.so.0 #7 0xb5073ff1 in ?? () from /lib/libglib-2.0.so.0 #8 0xb5074503 in g_main_context_iteration () from /lib/libglib-2.0.so.0 #9 0xb670705f in QEventDispatcherGlib::processEvents (this=0x94eb9d8, flags=...) at kernel/qeventdispatcher_glib.cpp:409 #10 0xb66da83a in QEventLoop::processEvents (this=0xada802f0, flags=...) at kernel/qeventloop.cpp:149 #11 0xb66dac82 in QEventLoop::exec (this=0xada802f0, flags=...) at kernel/qeventloop.cpp:201 #12 0xb65e8309 in QThread::exec (this=0xb10ca670) at thread/qthread.cpp:487 #13 0xb5626059 in KDevelop::CompletionWorkerThread::run (this=0xb10ca670) at /home/milianw/projects/kde4/kdevplatform/language/codecompletion/codecompletionmodel.cpp:82 #14 0xb65eb5e2 in QThreadPrivate::start (arg=0xb10ca670) at thread/qthread_unix.cpp:188 #15 0xb5136585 in start_thread (arg=0xada80b70) at pthread_create.c:300 #16 0xb59d929e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 Thread 5 (Thread 0xaa15fb70 (LWP 28792)): #0 0xb7856424 in __kernel_vsyscall () #1 0xb513a3d2 in pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_timedwait.S:179 #2 0xb59e6864 in __pthread_cond_timedwait (cond=0xaa15f284, mutex=0xaa15f2b4, abstime=0xaa15f2f0) at forward.c:152 #3 0xb65eafee in thread_sleep (ti=0xaa15f2f0) at thread/qthread_unix.cpp:297 #4 0xb65eb11b in QThread::msleep (msecs=<value optimized out>) at thread/qthread_unix.cpp:323 #5 0xaab3f3e0 in UIBlockTester::UIBlockTesterThread::run (this=0xac9173d0) at /home/milianw/projects/kde4/kdevelop/languages/cpp/cpplanguagesupport.cpp:678 #6 0xb65eb5e2 in QThreadPrivate::start (arg=0xac9173d0) at thread/qthread_unix.cpp:188 #7 0xb5136585 in start_thread (arg=0xaa15fb70) at pthread_create.c:300 #8 0xb59d929e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 The current source language is "auto; currently c". Thread 4 (Thread 0xa923eb70 (LWP 28800)): #0 0xb7856424 in __kernel_vsyscall () #1 0xb513a0a5 in pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_wait.S:122 #2 0xb59e680d in __pthread_cond_wait (cond=0x8f21eb0, mutex=0x8f21e98) at forward.c:139 #3 0xb65ec5c2 in QWaitConditionPrivate::wait (this=0x8ef8238, mutex=0x8f21fe0, time=4294967295) at thread/qwaitcondition_unix.cpp:87 #4 QWaitCondition::wait (this=0x8ef8238, mutex=0x8f21fe0, time=4294967295) at thread/qwaitcondition_unix.cpp:159 #5 0xb715eb10 in ThreadWeaver::WeaverImpl::blockThreadUntilJobsAreBeingAssigned (this=0x8ef8220, th=0x9458058) at ../../../threadweaver/Weaver/WeaverImpl.cpp:365 #6 0xb71610cc in ThreadWeaver::WorkingHardState::waitForAvailableJob (this=0x8ef81b8, th=0x9458058) at ../../../threadweaver/Weaver/WorkingHardState.cpp:80 #7 0xb715d1db in ThreadWeaver::WeaverImpl::waitForAvailableJob (this=0x8ef8220, th=0x9458058) at ../../../threadweaver/Weaver/WeaverImpl.cpp:356 #8 0xb71611c2 in ThreadWeaver::WorkingHardState::applyForWork (this=0x8ef81b8, th=0x9458058) at ../../../threadweaver/Weaver/WorkingHardState.cpp:71 #9 0xb715ed93 in ThreadWeaver::WeaverImpl::applyForWork (this=0x8ef8220, th=0x9458058, previous=0x9a6c8e8) at ../../../threadweaver/Weaver/WeaverImpl.cpp:351 #10 0xb715f39e in ThreadWeaver::ThreadRunHelper::run (this=0xa923e324, parent=0x8ef8220, th=0x9458058) at ../../../threadweaver/Weaver/Thread.cpp:87 #11 0xb715fabb in ThreadWeaver::Thread::run (this=0x9458058) at ../../../threadweaver/Weaver/Thread.cpp:142 #12 0xb65eb5e2 in QThreadPrivate::start (arg=0x9458058) at thread/qthread_unix.cpp:188 #13 0xb5136585 in start_thread (arg=0xa923eb70) at pthread_create.c:300 #14 0xb59d929e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 Thread 3 (Thread 0xa8a3db70 (LWP 28801)): #0 0xb7856424 in __kernel_vsyscall () #1 0xb513a0a5 in pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_wait.S:122 #2 0xb59e680d in __pthread_cond_wait (cond=0x8f21eb0, mutex=0x8f21e98) at forward.c:139 #3 0xb65ec5c2 in QWaitConditionPrivate::wait (this=0x8ef8238, mutex=0x8f21fe0, time=4294967295) at thread/qwaitcondition_unix.cpp:87 #4 QWaitCondition::wait (this=0x8ef8238, mutex=0x8f21fe0, time=4294967295) at thread/qwaitcondition_unix.cpp:159 #5 0xb715eb10 in ThreadWeaver::WeaverImpl::blockThreadUntilJobsAreBeingAssigned (this=0x8ef8220, th=0xaed0d838) at ../../../threadweaver/Weaver/WeaverImpl.cpp:365 #6 0xb71610cc in ThreadWeaver::WorkingHardState::waitForAvailableJob (this=0x8ef81b8, th=0xaed0d838) at ../../../threadweaver/Weaver/WorkingHardState.cpp:80 #7 0xb715d1db in ThreadWeaver::WeaverImpl::waitForAvailableJob (this=0x8ef8220, th=0xaed0d838) at ../../../threadweaver/Weaver/WeaverImpl.cpp:356 #8 0xb71611c2 in ThreadWeaver::WorkingHardState::applyForWork (this=0x8ef81b8, th=0xaed0d838) at ../../../threadweaver/Weaver/WorkingHardState.cpp:71 #9 0xb715ed93 in ThreadWeaver::WeaverImpl::applyForWork (this=0x8ef8220, th=0xaed0d838, previous=0x9905890) at ../../../threadweaver/Weaver/WeaverImpl.cpp:351 #10 0xb715f39e in ThreadWeaver::ThreadRunHelper::run (this=0xa8a3d324, parent=0x8ef8220, th=0xaed0d838) at ../../../threadweaver/Weaver/Thread.cpp:87 #11 0xb715fabb in ThreadWeaver::Thread::run (this=0xaed0d838) at ../../../threadweaver/Weaver/Thread.cpp:142 #12 0xb65eb5e2 in QThreadPrivate::start (arg=0xaed0d838) at thread/qthread_unix.cpp:188 #13 0xb5136585 in start_thread (arg=0xa8a3db70) at pthread_create.c:300 #14 0xb59d929e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 Thread 2 (Thread 0xa823cb70 (LWP 28802)): #0 0xb7856424 in __kernel_vsyscall () #1 0xb513a0a5 in pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_wait.S:122 #2 0xb59e680d in __pthread_cond_wait (cond=0x8f21eb0, mutex=0x8f21e98) at forward.c:139 #3 0xb65ec5c2 in QWaitConditionPrivate::wait (this=0x8ef8238, mutex=0x8f21fe0, time=4294967295) at thread/qwaitcondition_unix.cpp:87 #4 QWaitCondition::wait (this=0x8ef8238, mutex=0x8f21fe0, time=4294967295) at thread/qwaitcondition_unix.cpp:159 #5 0xb715eb10 in ThreadWeaver::WeaverImpl::blockThreadUntilJobsAreBeingAssigned (this=0x8ef8220, th=0xb1004a30) at ../../../threadweaver/Weaver/WeaverImpl.cpp:365 #6 0xb71610cc in ThreadWeaver::WorkingHardState::waitForAvailableJob (this=0x8ef81b8, th=0xb1004a30) at ../../../threadweaver/Weaver/WorkingHardState.cpp:80 #7 0xb715d1db in ThreadWeaver::WeaverImpl::waitForAvailableJob (this=0x8ef8220, th=0xb1004a30) at ../../../threadweaver/Weaver/WeaverImpl.cpp:356 #8 0xb71611c2 in ThreadWeaver::WorkingHardState::applyForWork (this=0x8ef81b8, th=0xb1004a30) at ../../../threadweaver/Weaver/WorkingHardState.cpp:71 #9 0xb715ed93 in ThreadWeaver::WeaverImpl::applyForWork (this=0x8ef8220, th=0xb1004a30, previous=0x0) at ../../../threadweaver/Weaver/WeaverImpl.cpp:351 #10 0xb715f39e in ThreadWeaver::ThreadRunHelper::run (this=0xa823c324, parent=0x8ef8220, th=0xb1004a30) at ../../../threadweaver/Weaver/Thread.cpp:87 #11 0xb715fabb in ThreadWeaver::Thread::run (this=0xb1004a30) at ../../../threadweaver/Weaver/Thread.cpp:142 #12 0xb65eb5e2 in QThreadPrivate::start (arg=0xb1004a30) at thread/qthread_unix.cpp:188 #13 0xb5136585 in start_thread (arg=0xa823cb70) at pthread_create.c:300 #14 0xb59d929e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 Thread 1 (Thread 0xb4cbf700 (LWP 28617)): [KCrash Handler] #6 0x00000000 in ?? () #7 0xb5d1f0e4 in QWidget::event (this=0x985e4b0, event=0xbf961cc4) at kernel/qwidget.cpp:7713 #8 0xb60c4543 in QFrame::event (this=0x985e4b0, e=0xbf961cc4) at widgets/qframe.cpp:559 #9 0xb616259f in QAbstractScrollArea::viewportEvent (this=0x985e4b0, e=0x94141e0) at widgets/qabstractscrollarea.cpp:962 #10 0xb6164b75 in QAbstractScrollAreaPrivate::viewportEvent (this=0x9159508, o=0x9a26778, e=0xbf961cc4) at widgets/qabstractscrollarea_p.h:100 #11 QAbstractScrollAreaFilter::eventFilter (this=0x9159508, o=0x9a26778, e=0xbf961cc4) at widgets/qabstractscrollarea_p.h:111 #12 0xb66db41a in QCoreApplicationPrivate::sendThroughObjectEventFilters (this=0x8d8ad28, receiver=0x9a26778, event=0xbf961cc4) at kernel/qcoreapplication.cpp:726 #13 0xb5cc8a6c in QApplicationPrivate::notify_helper (this=0x8d8ad28, receiver=0x9a26778, e=0xbf961cc4) at kernel/qapplication.cpp:4061 #14 0xb5cd111d in QApplication::notify (this=0xbf96363c, receiver=0x9a26778, e=0xbf961cc4) at kernel/qapplication.cpp:3854 #15 0xb6a16e2a in KApplication::notify (this=0xbf96363c, receiver=0x9a26778, event=0xbf961cc4) at ../../kdeui/kernel/kapplication.cpp:302 #16 0xb66dc1eb in QCoreApplication::notifyInternal (this=0xbf96363c, receiver=0x9a26778, event=0xbf961cc4) at kernel/qcoreapplication.cpp:610 #17 0xb5cd39ce in QCoreApplication::sendSpontaneousEvent (receiver=0x9a26778, event=0x94141e0) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:216 #18 0xb5d3f8ff in QETWidget::translateMouseEvent (this=0x9824490, event=0xbf96324c) at kernel/qapplication_x11.cpp:4417 #19 0xb5d3e646 in QApplication::x11ProcessEvent (this=0xbf96363c, event=0xbf96324c) at kernel/qapplication_x11.cpp:3430 #20 0xb5d68bc2 in x11EventSourceDispatch (s=0x8d8de70, callback=0, user_data=0x0) at kernel/qguieventdispatcher_glib.cpp:146 #21 0xb5070b38 in g_main_context_dispatch () from /lib/libglib-2.0.so.0 #22 0xb50743d0 in ?? () from /lib/libglib-2.0.so.0 #23 0xb5074503 in g_main_context_iteration () from /lib/libglib-2.0.so.0 #24 0xb6707041 in QEventDispatcherGlib::processEvents (this=0x8cea090, flags=...) at kernel/qeventdispatcher_glib.cpp:407 #25 0xb5d68305 in QGuiEventDispatcherGlib::processEvents (this=0x8cea090, flags=...) at kernel/qguieventdispatcher_glib.cpp:202 #26 0xb66da83a in QEventLoop::processEvents (this=0xbf963500, flags=...) at kernel/qeventloop.cpp:149 #27 0xb66dac82 in QEventLoop::exec (this=0xbf963500, flags=...) at kernel/qeventloop.cpp:201 #28 0xb66dd0d9 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:888 #29 0xb5cc8917 in QApplication::exec () at kernel/qapplication.cpp:3525 #30 0x0804fef4 in main (argc=1, argv=0xbf963cb4) at /home/milianw/projects/kde4/kdevelop/app/main_internal.cpp:232
This would fix the issue, but I find it rather hackisch. Any better ideas? Index: util/activetooltip.cpp =================================================================== --- util/activetooltip.cpp (revision 1114717) +++ util/activetooltip.cpp (working copy) @@ -156,6 +156,9 @@ void ActiveToolTip::showEvent(QShowEvent*) { adjustRect(); + foreach(QWidget* w, findChildren<QWidget*>()) { + w->setContextMenuPolicy(Qt::NoContextMenu); + } } void ActiveToolTip::updateMouseDistance()
How about installing an event filter on all child widgets (in the constructor, or wherever they're added) and eating right-click events in it? That would at least make it clearer why this happens (as opposed to a 3 line hack in some painting-related function).
Or how about this: Make the tooltip a real widget as soon as the mouse enters. That way a context menu popup would actually work and not try to hide/delete the "tooltip". PS: Thats what eclipse does and it seems to work pretty well (doesn't get in my way when using the keyboard and is useful when I use the mouse to navigate the tooltip)
I cannot reproduce this here It is a real widget. But at some point you have to decide when you hide it again, for example when you switch to another app, and that's the problem here. I remember that I've fixed this issue by walking the "QObject::parent" chain of the context-menu and see whether it's a child of the tool-tip (see ActiveToolTip::insideThis and ActiveToolTip::eventFilter). We should find out why it doesn't work in some cases.
afaik only reproducibly with KDE 4.3 / Qt 4.5 - which we still support in KDevelop 4.0. But I cannot reproduce with KDE 4.4. / Qt 4.6 - so maybe close nevertheless? I don't want to spent time on fixing it for 4.3 :-/
SVN commit 1115977 by zwabel: Completely disable the context-menu within the navigation widget. It is completely useless there, and can lead to crashes in the completion-list and navigation-tooltip due to the focus-change. BUG: 234323 M +3 -0 abstractnavigationwidget.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=1115977
*** Bug 240716 has been marked as a duplicate of this bug. ***
Sorry, wrong report.