Summary: | Drkonqi should avoid synchronous d-bus operations (KWallet, others...) | ||
---|---|---|---|
Product: | [Applications] drkonqi | Reporter: | Šarūnas <rakatan> |
Component: | general | Assignee: | Unassigned bugs mailing-list <unassigned-bugs> |
Status: | RESOLVED LATER | ||
Severity: | crash | CC: | ashl1future, fgm.cidacos, heri+kde, lemma, mail, sitter, stasnel, tor.m.briskodden |
Priority: | LO | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Ubuntu | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: | |||
Bug Depends on: | |||
Bug Blocks: | 278575 |
Description
Šarūnas
2011-02-10 16:04:17 UTC
This probably happened because the "remember login details" checkbox was checked, so drkonqi attempted to open KWallet to save the login information. However, the communication with kwallet over d-bus took a long time, so you clicked the cancel button. The problem is that the cancel button event was processed inside the event loop started from KWallet::Wallet::openWallet(), so the object that called this function was deleted and when this function returned after some timeout, the widget was already deleted and therefore crashed. There are two bugs here: 1) KWallet should call QEventLoop::exec() with the QEventLoop::ExcludeUserInputEvents flag, imho, so that such a thing cannot happen. 2) Drkonqi should use KWallet asynchronously anyway... CCing Michael, the KWallet maintainer. Michael, do you agree about using this flag in the event loop started from KWallet::Wallet::openWallet() ? *** Bug 286271 has been marked as a duplicate of this bug. *** *** Bug 293759 has been marked as a duplicate of this bug. *** *** Bug 308655 has been marked as a duplicate of this bug. *** *** Bug 278575 has been marked as a duplicate of this bug. *** Since kwallet 4.11.2 there no longer is a nested event loop so this crash is now impossible. The kwallet API however is still sync, and in fact has no async variant, so the UI can probably lock up if kwallet fails to respond. Not much to be done about this I am afraid, not until we (KDE) move from kwallet to the scecret-service API (async by design), which I think isn't really being worked on by anyone :( |