<div dir="ltr"><div>Short description: ProjectFolderItems are deleted by IProject::reloadModel while FileManagerListJob is processing them.<br></div><div><br></div>Long description:<div> - Project -> Open Configuration</div><div> - CMake -> remove build dir</div><div> - CMake -> add build dir</div><div> - apply -> triggers CMakePreferences::configure()</div><div> - while the configure job is running the file watches detect changes in build dir<br></div><div> - the changed directory (e.g. build/CMakeTmp) is enqueued for processing in FileManagerListJob::addSubDir </div><div> - configure job finishes -> IProject::reloadModel is triggered -> all ProjectFolderItems are removed</div><div> - FileManagerListJob tries to process next element FileManagerListJob::startNextJob() ... m_item = m_listQueue.dequeue();</div><div> - m_item is a pointer to deleted object (destroyed by IProjectModel::reloadModel)</div><div><br></div><div>I see two solutions (and I think I'd rather go with second one):</div><div> - remove any use of reloadModal and function alltogether</div><div> - convert FileManagerListJob to take Path/IndexedString by value instead of ProjectFolderItem*</div><div><br></div><div>Any suggestions?</div><div><br></div><div>Regards,</div><div>Maciej</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-04-08 15:06 GMT+02:00 Kevin Funk <span dir="ltr"><<a href="mailto:kfunk@kde.org" target="_blank">kfunk@kde.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Friday, April 8, 2016 2:48:49 PM CEST Maciej Cencora wrote:<br>
> In the mean time, here is another crash related to cmake configuration:<br>
><br>
> #0  KDevelop::Path::Path (this=0x7fffffffb350, other=..., child=...) at<br>
> ../util/path.cpp:130<br>
> #1  0x00007ffff2280cc3 in KDevelop::ProjectBaseItem::path<br>
> (this=this@entry=0x17ccaa0)<br>
> at ../project/projectmodel.cpp:451<br>
> #2  0x00007ffff22a1ab0 in KDevelop::FileManagerListJob::startNextJob<br>
> (this=0x263add0) at ../project/filemanagerlistjob.cpp:87<br>
> #3  0x00007ffff5861e81 in QObject::event(QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #4  0x00007ffff612505c in QApplicationPrivate::notify_helper(QObject*,<br>
> QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #5  0x00007ffff612a516 in QApplication::notify(QObject*, QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #6  0x00007ffff58325cb in QCoreApplication::notifyInternal(QObject*,<br>
> QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #7  0x00007ffff58349c6 in<br>
> QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) ()<br>
> from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #8  0x00007ffff5888653 in ?? () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #9  0x00007fffeda85137 in g_main_context_dispatch () from<br>
> /lib/x86_64-linux-gnu/libglib-2.0.so.0<br>
> #10 0x00007fffeda85390 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0<br>
> #11 0x00007fffeda8543c in g_main_context_iteration () from<br>
> /lib/x86_64-linux-gnu/libglib-2.0.so.0<br>
> #12 0x00007ffff5888a5f in<br>
> QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)<br>
> () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #13 0x00007ffff582fd8a in<br>
> QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #14 0x00007ffff631fc4d in QDialog::exec() () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #15 0x00007ffff7ad8104 in KDevelop::ProjectControllerPrivate::projectConfig<br>
> (this=<optimized out>, obj=<optimized out>) at<br>
> ../shell/projectcontroller.cpp:157<br>
> #16 0x00007ffff5860e2f in QMetaObject::activate(QObject*, int, int, void**)<br>
> () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #17 0x00007ffff611b412 in QAction::triggered(bool) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #18 0x00007ffff611d898 in QAction::activate(QAction::ActionEvent) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #19 0x00007ffff629fdf2 in ?? () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #20 0x00007ffff62a608c in ?? () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #21 0x00007ffff62aa000 in QMenu::mouseReleaseEvent(QMouseEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #22 0x00007ffff6167f88 in QWidget::event(QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #23 0x00007ffff62aaa53 in QMenu::event(QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #24 0x00007ffff612505c in QApplicationPrivate::notify_helper(QObject*,<br>
> QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #25 0x00007ffff612ac19 in QApplication::notify(QObject*, QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #26 0x00007ffff58325cb in QCoreApplication::notifyInternal(QObject*,<br>
> QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #27 0x00007ffff6129b32 in QApplicationPrivate::sendMouseEvent(QWidget*,<br>
> QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) ()<br>
> from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #28 0x00007ffff61828dd in ?? () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #29 0x00007ffff6184b3b in ?? () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #30 0x00007ffff612505c in QApplicationPrivate::notify_helper(QObject*,<br>
> QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #31 0x00007ffff612a516 in QApplication::notify(QObject*, QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #32 0x00007ffff58325cb in QCoreApplication::notifyInternal(QObject*,<br>
> QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #33 0x00007ffff5b74521 in<br>
> QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mou<br>
> seEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5<br>
> #34 0x00007ffff5b761e5 in<br>
> QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePriva<br>
> te::WindowSystemEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5<br>
> #35 0x00007ffff5b59f38 in<br>
> QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEve<br>
> ntsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5<br>
> #36 0x00007fffdd1c1d90 in ?? () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5<br>
> #37 0x00007fffeda85137 in g_main_context_dispatch () from<br>
> /lib/x86_64-linux-gnu/libglib-2.0.so.0<br>
> #38 0x00007fffeda85390 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0<br>
> #39 0x00007fffeda8543c in g_main_context_iteration () from<br>
> /lib/x86_64-linux-gnu/libglib-2.0.so.0<br>
> #40 0x00007ffff5888a5f in<br>
> QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)<br>
> () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #41 0x00007ffff582fd8a in<br>
> QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #42 0x00007ffff62a4de0 in QMenu::exec(QPoint const&, QAction*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #43 0x00007fffb14760c1 in ProjectTreeView::popupContextMenu<br>
> (this=<optimized out>, pos=...) at<br>
> ../plugins/projectmanagerview/projecttreeview.cpp:359<br>
> #44 0x00007ffff5860e2f in QMetaObject::activate(QObject*, int, int, void**)<br>
> () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #45 0x00007ffff614ebe5 in QWidget::customContextMenuRequested(QPoint<br>
> const&) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #46 0x00007ffff616897e in QWidget::event(QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #47 0x00007ffff6266b2e in QFrame::event(QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #48 0x00007ffff638c5ab in QAbstractItemView::viewportEvent(QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #49 0x00007ffff63cb0cc in QTreeView::viewportEvent(QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #50 0x00007ffff58323b2 in<br>
> QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*)<br>
> () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #51 0x00007ffff612503c in QApplicationPrivate::notify_helper(QObject*,<br>
> QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #52 0x00007ffff612bea1 in QApplication::notify(QObject*, QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #53 0x00007ffff58325cb in QCoreApplication::notifyInternal(QObject*,<br>
> QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #54 0x00007ffff61826b2 in ?? () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #55 0x00007ffff6184b3b in ?? () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #56 0x00007ffff612505c in QApplicationPrivate::notify_helper(QObject*,<br>
> QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #57 0x00007ffff612a516 in QApplication::notify(QObject*, QEvent*) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>
> #58 0x00007ffff58325cb in QCoreApplication::notifyInternal(QObject*,<br>
> QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #59 0x00007ffff5b74521 in<br>
> QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mou<br>
> seEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5<br>
> #60 0x00007ffff5b761e5 in<br>
> QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePriva<br>
> te::WindowSystemEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5<br>
> #61 0x00007ffff5b59f38 in<br>
> QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEve<br>
> ntsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5<br>
> #62 0x00007fffdd1c1d90 in ?? () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5<br>
> #63 0x00007fffeda85137 in g_main_context_dispatch () from<br>
> /lib/x86_64-linux-gnu/libglib-2.0.so.0<br>
> #64 0x00007fffeda85390 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0<br>
> #65 0x00007fffeda8543c in g_main_context_iteration () from<br>
> /lib/x86_64-linux-gnu/libglib-2.0.so.0<br>
> #66 0x00007ffff5888a5f in<br>
> QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)<br>
> () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #67 0x00007ffff582fd8a in<br>
> QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #68 0x00007ffff5837e2c in QCoreApplication::exec() () from<br>
> /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>
> #69 0x000000000040c837 in main (argc=<optimized out>, argv=<optimized out>)<br>
> at ../app/main.cpp:680<br>
><br>
> (gdb) print other<br>
> $2 = (const KDevelop::Path &) @0x38: <error reading variable><br>
<br>
</div></div>Known crash (same backtrace, different trigger, though):<br>
  <a href="https://bugs.kde.org/show_bug.cgi?id=355241" rel="noreferrer" target="_blank">https://bugs.kde.org/show_bug.cgi?id=355241</a><br>
<br>
Patches *very* welcome!<br>
<br>
Could you have a look?<br>
<div class="HOEnZb"><div class="h5"><br>
> This one is almost 100% reproducible.<br>
> Open project settings -> cmake -> remove the only build dir -> add new<br>
> build dir with same path as previous -> "Apply" -> cmake configuration is<br>
> started and while it is still running, the crash occurs.<br>
> For this one I haven't found the culprit yet.<br>
><br>
> Regards,<br>
> Maciej<br>
><br>
> 2016-04-08 14:22 GMT+02:00 Maciej Cencora <<a href="mailto:m.cencora@gmail.com">m.cencora@gmail.com</a>>:<br>
> > @Kevin:<br>
> > I've send you a wrong backtrace privately.<br>
> ><br>
> > It seems I don't have the original backtrace anymore. Will try to get it,<br>
> > but most of the time it does not crash so it may take some time.<br>
> ><br>
> > Regards,<br>
> > Maciej<br>
> ><br>
> > 2016-04-08 12:52 GMT+02:00 Kevin Funk <<a href="mailto:kfunk@kde.org">kfunk@kde.org</a>>:<br>
> >> On Friday, April 8, 2016 12:44:04 PM CEST Maciej Cencora wrote:<br>
> >> > Hi,<br>
> >> ><br>
> >> > I need directions on fixing a crash.<br>
> >> > Project->Prune Selection action triggers removal of a whole build<br>
> >><br>
> >> directory.<br>
> >><br>
> >> > File notifier catches deletion of commands file and triggers<br>
> >> > CMakeManager::dirtyFile -> reload -> createImportJob -><br>
> >><br>
> >> IProject::configure.<br>
> >><br>
> >> > In the end cmake configure stage gets triggered while its build dir is<br>
> >> > being removed. Depending on timing it may or may not trigger a crash.<br>
> >><br>
> >> ... and the backtrace is? :)<br>
> >><br>
> >> > Any ideas what would be the best way to fix this?<br>
> >> ><br>
> >> > Regards,<br>
> >> > Maciej<br>
> >><br>
> >> --<br>
> >> Kevin Funk | <a href="mailto:kfunk@kde.org">kfunk@kde.org</a> | <a href="http://kfunk.org" rel="noreferrer" target="_blank">http://kfunk.org</a><br>
<br>
<br>
--<br>
Kevin Funk | <a href="mailto:kfunk@kde.org">kfunk@kde.org</a> | <a href="http://kfunk.org" rel="noreferrer" target="_blank">http://kfunk.org</a></div></div></blockquote></div><br></div>