Summary: | Dolphin crashes instantly whenever trying to let it read out a marked filename | ||
---|---|---|---|
Product: | [Applications] dolphin | Reporter: | Ettore Atalan <atalanttore> |
Component: | view-engine: general | Assignee: | Dolphin Bug Assignee <dolphin-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | crash | Keywords: | investigated |
Priority: | NOR | ||
Version: | 2.1 | ||
Target Milestone: | --- | ||
Platform: | Ubuntu | ||
OS: | Linux | ||
Latest Commit: | http://commits.kde.org/kde-baseapps/951cb9c35d7a9ef814b3de5b359915968da9b881 | Version Fixed In: | 4.9.4 |
Sentry Crash Report: |
Description
Ettore Atalan
2012-10-07 11:56:40 UTC
Thanks for the bug report! I can confirm this crash. When running in Valgrind, such that everything is really slow, I can see that an error message box pops up, telling me that something about the text-to-speech setup is wrong. When this box gets the focus from KItemListRoleEditor, KItemListRoleEditor::event(QEvent* event) makes sure that the roleEditingFinished() signal is emitted, which invokes KStandardItemListWidget::slotRoleEditingFinished(), which calls KStandardItemListWidget::closeRoleEditor(), which deletes the role editor using deleteLater(). Unfortunately, the KItemListRoleEditor, which is a subclass of KTextEdit, is deleted then inside the context menu's event loop while the function that created it, KTextEdit::contextMenuEvent(), is still being executed. As soon as we return to that function, we therefore get a crash. I thought that using Qt::QueuedConnection for the connections in KStandardItemListWidget::editedRoleChanged() might be sufficient to fix this, but the slot is still called inside the nested event loop, so we need something better. Git commit 951cb9c35d7a9ef814b3de5b359915968da9b881 by Frank Reininghaus. Committed on 05/11/2012 at 22:03. Pushed by freininghaus into branch 'KDE/4.9'. Prevent crashes caused by nested event loops run when renaming inline When renaming inline and starting a drag or invoking the context menu, a nested event loop will be run. If the role editor loses focus and emits roleEditingFinished(), we must prevent that deleteLater() is called because this would delete the role editor inside a nested event loop which is run from one of its own functions. We would get a crash when returning from that event loop otherwise. Related: bug 309421 FIXED-IN: 4.9.4 M +9 -2 dolphin/src/kitemviews/kstandarditemlistwidget.cpp M +47 -2 dolphin/src/kitemviews/private/kitemlistroleeditor.cpp M +12 -0 dolphin/src/kitemviews/private/kitemlistroleeditor.h http://commits.kde.org/kde-baseapps/951cb9c35d7a9ef814b3de5b359915968da9b881 Thanks! |