Bug 387232 - KDirWatch crash when calling KDW::addDir() during shutdown
Summary: KDirWatch crash when calling KDW::addDir() during shutdown
Status: RESOLVED NOT A BUG
Alias: None
Product: kdevelop
Classification: Applications
Component: general (show other bugs)
Version: 5.2.0
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: kdevelop-bugs-null
URL:
Keywords: drkonqi
Depends on:
Blocks:
 
Reported: 2017-11-23 09:12 UTC by RJVB
Modified: 2018-04-13 18:34 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description RJVB 2017-11-23 09:12:16 UTC
Application: kdevelop (5.2.0-43-ge3df584fc9)
 (Compiled from sources)
Qt Version: 5.8.0
Frameworks Version: 5.38.0
Operating System: Linux 4.9.30-ck1-mainline-core2-rjvb x86_64
Distribution: Ubuntu 14.04.5 LTS

-- Information about the crash:
- What I was doing when the application crashed:
I had told KDevelop to quit.

- Unusual behaviour I noticed:
KDevelop had started burning 100% CPU on one of my cores without apparent reason so I decided to relaunch the session.

-- Backtrace:
Application: KDevelop (kdevelop), signal: Segmentation fault
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Current thread is 1 (Thread 0x7fd1d5efd7c0 (LWP 27418))]

Thread 10 (Thread 0x7fd1ba1b7700 (LWP 27421)):
#0  0x00007fd1cdee8c5d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007fd1c4bf7b72 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#2  0x00007fd1c4bf964f in xcb_wait_for_event () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#3  0x00007fd1bce45549 in QXcbEventReader::run (this=0x21ac2d0) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/plugins/platforms/xcb/qxcbconnection.cpp:1345
#4  0x00007fd1ceab7cf9 in QThreadPrivate::start (arg=0x21ac2d0) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qthread_unix.cpp:368
#5  0x00007fd1c8a64184 in start_thread (arg=0x7fd1ba1b7700) at pthread_create.c:312
#6  0x00007fd1cdef5ffd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 9 (Thread 0x7fd1aee9b700 (LWP 27422)):
#0  0x00007fd1cdee8c5d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007fd1c5fae081 in g_main_context_iterate.isra () from /opt/local/lib/libglib-2.0.so.0
#2  0x00007fd1c5fae18c in g_main_context_iteration () from /opt/local/lib/libglib-2.0.so.0
#3  0x00007fd1cecd559b in QEventDispatcherGlib::processEvents (this=0x7fd1a80008c0, flags=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:425
#4  0x00007fd1cec8117a in QEventLoop::exec (this=this@entry=0x7fd1aee9ade0, flags=..., flags@entry=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qeventloop.cpp:212
#5  0x00007fd1ceab32ab in QThread::exec (this=this@entry=0x7fd1d1775460 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qthread.cpp:507
#6  0x00007fd1d1505005 in QDBusConnectionManager::run (this=0x7fd1d1775460 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/dbus/qdbusconnection.cpp:170
#7  0x00007fd1ceab7cf9 in QThreadPrivate::start (arg=0x7fd1d1775460 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qthread_unix.cpp:368
#8  0x00007fd1c8a64184 in start_thread (arg=0x7fd1aee9b700) at pthread_create.c:312
#9  0x00007fd1cdef5ffd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 8 (Thread 0x7fd1a6d1b700 (LWP 27529)):
#0  0x00007fd1cdee8c5d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007fd1c5fae081 in g_main_context_iterate.isra () from /opt/local/lib/libglib-2.0.so.0
#2  0x00007fd1c5fae18c in g_main_context_iteration () from /opt/local/lib/libglib-2.0.so.0
#3  0x00007fd1cecd559b in QEventDispatcherGlib::processEvents (this=0x7fd1a00008c0, flags=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:425
#4  0x00007fd1cec8117a in QEventLoop::exec (this=this@entry=0x7fd1a6d1ad90, flags=..., flags@entry=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qeventloop.cpp:212
#5  0x00007fd1ceab32ab in QThread::exec (this=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qthread.cpp:507
#6  0x00007fd1cc05a1ee in KDevelop::DUChainPrivate::CleanupThread::run (this=0x2f976f0) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_kf5-kdevelop/kf5-kdevelop-devel/work/kf5-kdevelop-5/kdevplatform/language/duchain/duchain.cpp:283
#7  0x00007fd1ceab7cf9 in QThreadPrivate::start (arg=0x2f976f0) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qthread_unix.cpp:368
#8  0x00007fd1c8a64184 in start_thread (arg=0x7fd1a6d1b700) at pthread_create.c:312
#9  0x00007fd1cdef5ffd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 7 (Thread 0x7fd1a5829700 (LWP 27530)):
#0  0x00007ffe25328b55 in ?? ()
#1  0x0000000000000000 in ?? ()

Thread 6 (Thread 0x7fd19e5ce700 (LWP 27532)):
#0  0x00007ffe25328b55 in ?? ()
#1  0x0000000000000000 in ?? ()

Thread 5 (Thread 0x7fd166ffd700 (LWP 29863)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd1ceab8aeb in wait (time=18446744073709551615, this=0x2d9b260) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qwaitcondition_unix.cpp:143
#2  QWaitCondition::wait (this=<optimized out>, mutex=0x2dc6d80, time=time@entry=18446744073709551615) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qwaitcondition_unix.cpp:215
#3  0x00007fd1cb12e47b in ThreadWeaver::Weaver::blockThreadUntilJobsAreBeingAssigned_locked (this=this@entry=0x2d9b170, th=th@entry=0x5a6d6f0) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:594
#4  0x00007fd1cb12e4ab in ThreadWeaver::Weaver::blockThreadUntilJobsAreBeingAssigned (this=0x2d9b170, th=0x5a6d6f0) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:581
#5  0x00007fd1cb134820 in ThreadWeaver::SuspendingState::applyForWork (this=0x2cf5b10, th=0x5a6d6f0, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/suspendingstate.cpp:61
#6  0x00007fd1cb12e32f in ThreadWeaver::Weaver::applyForWork (this=<optimized out>, th=0x5a6d6f0, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:568
#7  0x00007fd1cb1345b2 in ThreadWeaver::WorkingHardState::applyForWork (this=0x2cdc0b0, th=0x5a6d6f0, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/workinghardstate.cpp:73
#8  0x00007fd1cb12e32f in ThreadWeaver::Weaver::applyForWork (this=<optimized out>, th=0x5a6d6f0, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:568
#9  0x00007fd1cb1345b2 in ThreadWeaver::WorkingHardState::applyForWork (this=0x2cdc0b0, th=0x5a6d6f0, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/workinghardstate.cpp:73
#10 0x00007fd1cb12e32f in ThreadWeaver::Weaver::applyForWork (this=<optimized out>, th=0x5a6d6f0, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:568
#11 0x00007fd1cb1345b2 in ThreadWeaver::WorkingHardState::applyForWork (this=0x2cdc0b0, th=0x5a6d6f0, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/workinghardstate.cpp:73
#12 0x00007fd1cb12e32f in ThreadWeaver::Weaver::applyForWork (this=<optimized out>, th=0x5a6d6f0, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:568
#13 0x00007fd1cb131bb0 in ThreadWeaver::Thread::run (this=0x5a6d6f0) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/thread.cpp:103
#14 0x00007fd1ceab7cf9 in QThreadPrivate::start (arg=0x5a6d6f0) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qthread_unix.cpp:368
#15 0x00007fd1c8a64184 in start_thread (arg=0x7fd166ffd700) at pthread_create.c:312
#16 0x00007fd1cdef5ffd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 4 (Thread 0x7fd1677fe700 (LWP 29864)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd1ceab8aeb in wait (time=18446744073709551615, this=0x2d9b260) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qwaitcondition_unix.cpp:143
#2  QWaitCondition::wait (this=<optimized out>, mutex=0x2dc6d80, time=time@entry=18446744073709551615) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qwaitcondition_unix.cpp:215
#3  0x00007fd1cb12e47b in ThreadWeaver::Weaver::blockThreadUntilJobsAreBeingAssigned_locked (this=this@entry=0x2d9b170, th=th@entry=0x7fd15c09c260) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:594
#4  0x00007fd1cb12e4ab in ThreadWeaver::Weaver::blockThreadUntilJobsAreBeingAssigned (this=0x2d9b170, th=0x7fd15c09c260) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:581
#5  0x00007fd1cb134a43 in non-virtual thunk to ThreadWeaver::SuspendedState::applyForWork(ThreadWeaver::Thread*, bool) () at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/suspendedstate.cpp:49
#6  0x00007fd1cb12e32f in ThreadWeaver::Weaver::applyForWork (this=<optimized out>, th=0x7fd15c09c260, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:568
#7  0x00007fd1cb1345b2 in ThreadWeaver::WorkingHardState::applyForWork (this=0x2cdc0b0, th=0x7fd15c09c260, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/workinghardstate.cpp:73
#8  0x00007fd1cb12e32f in ThreadWeaver::Weaver::applyForWork (this=<optimized out>, th=0x7fd15c09c260, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:568
#9  0x00007fd1cb1345b2 in ThreadWeaver::WorkingHardState::applyForWork (this=0x2cdc0b0, th=0x7fd15c09c260, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/workinghardstate.cpp:73
#10 0x00007fd1cb12e32f in ThreadWeaver::Weaver::applyForWork (this=<optimized out>, th=0x7fd15c09c260, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:568
#11 0x00007fd1cb131bb0 in ThreadWeaver::Thread::run (this=0x7fd15c09c260) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/thread.cpp:103
#12 0x00007fd1ceab7cf9 in QThreadPrivate::start (arg=0x7fd15c09c260) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qthread_unix.cpp:368
#13 0x00007fd1c8a64184 in start_thread (arg=0x7fd1677fe700) at pthread_create.c:312
#14 0x00007fd1cdef5ffd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 3 (Thread 0x7fd154bfd700 (LWP 29865)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fd1ceab8aeb in wait (time=18446744073709551615, this=0x2d9b260) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qwaitcondition_unix.cpp:143
#2  QWaitCondition::wait (this=<optimized out>, mutex=0x2dc6d80, time=time@entry=18446744073709551615) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qwaitcondition_unix.cpp:215
#3  0x00007fd1cb12e47b in ThreadWeaver::Weaver::blockThreadUntilJobsAreBeingAssigned_locked (this=this@entry=0x2d9b170, th=th@entry=0x7fd158018a70) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:594
#4  0x00007fd1cb12e4ab in ThreadWeaver::Weaver::blockThreadUntilJobsAreBeingAssigned (this=0x2d9b170, th=0x7fd158018a70) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:581
#5  0x00007fd1cb134a43 in non-virtual thunk to ThreadWeaver::SuspendedState::applyForWork(ThreadWeaver::Thread*, bool) () at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/suspendedstate.cpp:49
#6  0x00007fd1cb12e32f in ThreadWeaver::Weaver::applyForWork (this=<optimized out>, th=0x7fd158018a70, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:568
#7  0x00007fd1cb1345b2 in ThreadWeaver::WorkingHardState::applyForWork (this=0x2cdc0b0, th=0x7fd158018a70, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/workinghardstate.cpp:73
#8  0x00007fd1cb12e32f in ThreadWeaver::Weaver::applyForWork (this=<optimized out>, th=0x7fd158018a70, wasBusy=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/weaver.cpp:568
#9  0x00007fd1cb131bb0 in ThreadWeaver::Thread::run (this=0x7fd158018a70) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-threadweaver/work/threadweaver-5.38.0/src/thread.cpp:103
#10 0x00007fd1ceab7cf9 in QThreadPrivate::start (arg=0x7fd158018a70) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/thread/qthread_unix.cpp:368
#11 0x00007fd1c8a64184 in start_thread (arg=0x7fd154bfd700) at pthread_create.c:312
#12 0x00007fd1cdef5ffd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 2 (Thread 0x7fd14f7fe700 (LWP 22180)):
#0  0x00007ffe25328b55 in ?? ()
#1  0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7fd1d5efd7c0 (LWP 27418)):
[KCrash Handler]
#6  load (__m=<optimized out>, this=<optimized out>) at /usr/include/c++/7/bits/atomic_base.h:396
#7  load<int> (_q_value=...) at /opt/local/include/qt5/QtCore/qatomic_cxx11.h:227
#8  load (this=<optimized out>) at /opt/local/include/qt5/QtCore/qbasicatomic.h:102
#9  isShared (this=<optimized out>) at /opt/local/include/qt5/QtCore/qrefcount.h:101
#10 detach (this=<optimized out>) at /opt/local/include/qt5/QtCore/qmap.h:365
#11 find (akey=..., this=<optimized out>) at /opt/local/include/qt5/QtCore/qmap.h:874
#12 KDirWatchPrivate::entry (this=0x6, _path=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-kcoreaddons/work/kcoreaddons-5.38.0/src/lib/io/kdirwatch.cpp:597
#13 0x00007fd1d012294d in KDirWatch::contains (this=0x4f53570, _path=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-kcoreaddons/work/kcoreaddons-5.38.0/src/lib/io/kdirwatch.cpp:1967
#14 0x00007fd1caf06892 in KDevelop::ProjectWatcher::addDir (this=0x4f53570, path=..., watchModes=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_kf5-kdevelop/kf5-kdevelop-devel/work/kf5-kdevelop-5/kdevplatform/project/projectwatcher.cpp:39
#15 0x00007fd1cecaf121 in QObject::event (this=0x33ff170, e=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qobject.cpp:1263
#16 0x00007fd1cf9faa5c in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x33ff170, e=0x7fd0d1242260) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/widgets/kernel/qapplication.cpp:3745
#17 0x00007fd1cfa01cd1 in QApplication::notify (this=0x7ffe25217fd8, receiver=0x33ff170, e=0x7fd0d1242260) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/widgets/kernel/qapplication.cpp:3502
#18 0x00007fd1cec83018 in QCoreApplication::notifyInternal2 (receiver=0x33ff170, event=event@entry=0x7fd0d1242260) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qcoreapplication.cpp:995
#19 0x00007fd1cec8567d in sendEvent (event=0x7fd0d1242260, receiver=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qcoreapplication.h:231
#20 QCoreApplicationPrivate::sendPostedEvents (receiver=receiver@entry=0x0, event_type=event_type@entry=0, data=0x218b4f0) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qcoreapplication.cpp:1655
#21 0x00007fd1cec85ae8 in QCoreApplication::sendPostedEvents (receiver=receiver@entry=0x0, event_type=event_type@entry=0) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qcoreapplication.cpp:1509
#22 0x00007fd1cecd5173 in postEventSourceDispatch (s=0x21d4ac0) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:276
#23 0x00007fd1c5fade37 in g_main_context_dispatch () from /opt/local/lib/libglib-2.0.so.0
#24 0x00007fd1c5fae108 in g_main_context_iterate.isra () from /opt/local/lib/libglib-2.0.so.0
#25 0x00007fd1c5fae18c in g_main_context_iteration () from /opt/local/lib/libglib-2.0.so.0
#26 0x00007fd1cecd557f in QEventDispatcherGlib::processEvents (this=0x231c900, flags=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:423
#27 0x00007fd1cec8117a in QEventLoop::exec (this=this@entry=0x7ffe25217da0, flags=..., flags@entry=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qeventloop.cpp:212
#28 0x00007fd1cec89524 in QCoreApplication::exec () at /opt/local/var/lnxports/build/_opt_local_site-ports_aqua_qt5-kde-devel/qt5-kde-devel/work/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib/kernel/qcoreapplication.cpp:1268
#29 0x00000000004139f7 in main (argc=<optimized out>, argv=<optimized out>) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_kf5-kdevelop/kf5-kdevelop-devel/work/kf5-kdevelop-5/app/main.cpp:929

Reported using DrKonqi
Comment 1 Milian Wolff 2017-11-23 09:44:19 UTC
#12 KDirWatchPrivate::entry (this=0x6, _path=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-kcoreaddons/work/kcoreaddons-5.38.0/src/lib/io/kdirwatch.cpp:597
#13 0x00007fd1d012294d in KDirWatch::contains (this=0x4f53570, _path=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_KF5-Frameworks/kf5-kcoreaddons/work/kcoreaddons-5.38.0/src/lib/io/kdirwatch.cpp:1967
#14 0x00007fd1caf06892 in KDevelop::ProjectWatcher::addDir (this=0x4f53570, path=..., watchModes=...) at /opt/local/var/lnxports/build/_opt_local_site-ports_kf5_kf5-kdevelop/kf5-kdevelop-devel/work/kf5-kdevelop-5/kdevplatform/project/projectwatcher.cpp:39

Are you sure the dirwatch in your project watcher class is actually still valid? This looks like a queued event triggers a call to ProjectWatcher::addDir which then tries to access an already-deleted KDirWatch (note the this=0x6 of the KDirWatchPrivate). I doubt this is a bug in KDirWatch, but rather your code that is calling it is broken.
Comment 2 RJVB 2017-11-23 09:47:06 UTC
I have no idea how ProjectWatcher::addDir() can have been called here: it isn't connected directly to any signals. It *is* called from a lambda, can it be that that doesn't appear in a backtrace?

However this happened, the ProjectWatcher instance must have been stale judging from the terminal output I saw.
Comment 3 RJVB 2017-11-23 10:05:21 UTC
Oops, crossed comments.

Yes, the only immediate explanation I can see is that a "watchDir" signal was delivered to my lambda after a project was unloaded (the lambda that's now connected without explicit connection type specifier, you know what I mean). What I don't understand is how this can have happened; the signal source should also have been taken down when the project was being unloaded. It may have been related to overall instability which also caused the CPU burning.

I've been running this code for weeks now and never saw this happen before. I'm making some changes - disconnecting the "watchDir" signal explicitly in the appropriate locations and catching QCoreApplication::aboutToQuit in ProjectWatcher to stop the monitoring. That seems like a reasonable thing to do anyway.

Is there anything else one can do to prevent queued signals that get delivered after the target was deleted, handle them properly? Maybe use deleteLater() on the watcher instance?
Comment 4 RJVB 2017-11-23 10:58:36 UTC
There's something else that's fishy, I'm now pretty certain that the CPU burning is due to an issue in the AbstractFileManagerPlugin and/or the FileManagerListJob classes which somehow start reloading all or part of a project continuously. Hard to tell exactly what happens but I didn't see any trace of my ProjectWatcher class causing this directly (activating a trace in AFMPP::dirty() doesn't print anything).

The project that's causing this is one using autoconf, and the issue started when I made an edit to its configure.ac . Looks like this starts an infinite loop; autoconf is apparently called automatically and since the edit is incomplete there's an error situation somewhere which isn't handled properly.

This doesn't always cause signals to be delivered to a stale ProjectWatcher class but it seems I do have to rethink my design a bit :-/
Comment 5 RJVB 2017-11-23 11:38:12 UTC
So... what seems to be burning CPU is a number of FileManagerListJob instances that keep running and calling FileManagerListJob::startNextJob() which in turn emits the watchDir signal.

What I fail to see (yet) is how emitting that signal can lead to this. Adding a directory to the watch list doesn't have the direct effect of (re)loading that directory, and there are no dirty signals being generated either (those could of course cause directory reloading).

Yet, the issue goes away when I make ProjectWatcher::addDir() a stub (that doesn't call KDirWatch::addDir()).

I could imagine how the autoconf and configure steps generate one or more directories that should be ignored, but not how the current "stock" dirwatching implementation isn't vulnerable to this situation.

The whole issue went away when I undid the configure.ac edit, restored the original configure file and re-ran my configure command OUTSIDE of KDevelop.

Only to start anew as soon as I made a change to configure.ac in KDevelop, before I even saved the file.

I'm going to see what happens when I emit the dirWatch signal only for previously unwatched directories or from a different location, but I think the issue goes deeper than just my new dirwatching algorithm.

It looks to me that there's an issue with the project manager being used here which is exposed/triggered by my dirwatching algorithm.
Comment 6 Kevin Funk 2017-11-23 11:47:02 UTC
René, this bug is three hours old and it already has several pages of text. Be assured that there are very few persons having the time/motivation to read through all of that. I did, and it's super noisy text (with very little actual information).

Please, we don't need a live log of how you're trying to investigate this bug; instead, do your analysis, tests, then *sum* up your findings and report them here. It doesn't help updating bug reports on a hourly basis with your recent brain dump.

I'm happy about your motivation to work on these issues; but the feedback needs to be provided/presented differently.
Comment 7 Kevin Funk 2017-11-23 11:48:51 UTC
Which patches do you have applied anyway? You're lacking that information. We don't have projectwatcher.cpp in our code base.

How are we supposed to try to reproduce this without that information?
Comment 8 Milian Wolff 2017-11-23 12:34:25 UTC
exactly, don't report bugs for crashes in your WIP patches
Comment 9 RJVB 2017-11-23 13:15:02 UTC
So you can put a finger on the (supposed) bug in my patch, meaning the thing it fails to do to avoid signals from being delivered to a stale object? Please enlighten me if that's the case...
Comment 10 Milian Wolff 2017-11-23 13:26:18 UTC
troll answer: yes, remove the project watcher as I told you to
Comment 11 RJVB 2017-11-23 13:44:26 UTC
That's a troll answer indeed (where's the flag/report thingy?). The same thing would happen when using KDirWatch directly.

Kevin, I also feel like I'm rambling. The thing is I'm largely groping in the dark with a test-case that is a huge project (the CodeBlocks source tree) and am trying to provide whatever information that might ring a bell with someone to help put me on the right track. Not writing all that will generate less noise evidently, but is also the best way NOT to get useful feedback.

The patch we're talking about is this: https://phabricator.kde.org/D7995
Comment 12 RJVB 2017-11-23 13:55:45 UTC
Got rid of the watchDir signal and let the addDir() call be made directly by the FileManagerListJob.

That solves the direct reason for the crash (no more signals, so none delivered to a stale object either).

However, the underlying issue must persist and has nothing to do with my patch. The CPU burning should have been a clear signal: the entire project is being reloaded repeatedly because files keep changing in the project root. And as far as I can see there is no protection whatsoever against doing multiple concurrent reloads; FileManagerListJob happily runs as many copies of itself as requested.
Comment 13 Kevin Funk 2017-11-23 14:57:25 UTC
It is still INVALID since this bug report is about code which was never part of KDevelop.
Comment 14 Sven Brauch 2017-11-23 16:01:55 UTC
... which is completely wtf. Please, please never do that. It's super confusing and a huge waste of time. Issues with unsubmitted patches must not be listed in the bugtracker.
Comment 15 RJVB 2017-11-23 17:33:18 UTC
Well, if apologies are in order ...

Fact is I didn't realise the relationship to my patch until the report was already submitted.
Comment 16 Sven Brauch 2017-11-23 17:35:51 UTC
Yeah, never mind if it wasn't intentional, happens.