| Summary: | Crash when disconnecting from WLM | ||
|---|---|---|---|
| Product: | [Unmaintained] kopete | Reporter: | Lamarque V. Souza <lamarque> |
| Component: | WLM Plugin | Assignee: | Kopete Developers <kopete-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | crash | CC: | jaak |
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Gentoo Packages | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
| Attachments: |
Makes race condition unlikely to happen
Backtrace of the crash |
||
Created attachment 35199 [details]
Makes race condition unlikely to happen
Created attachment 35200 [details]
Backtrace of the crash
SVN commit 1067407 by rjarosz: Use deleteLater instead of delete for WlmServer because Connection::disconnect may access it after delete was called. Don't leak NotificationServerConnection if user typed bad password (and porbably on other errors too). Use standard bad password disconnection. BUG: 199580 M +5 -7 wlmaccount.cpp M +3 -7 wlmserver.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=1067407 *** Bug 220509 has been marked as a duplicate of this bug. *** |
Version: (using KDE 4.2.4) Compiler: gcc version 4.3.2 Gentoo 4.3.2-r3 p1.6, pie-10.1.5 OS: Linux Installed from: Gentoo Packages Sometimes Kopete crashes when disconnecting from WLM server. I think I have found the cause, which seems a race condition in WlmServer::WlmDisconnect: 1 if (mainConnection) 2 { 3 disconnecting = true; 4 QListIterator<WlmSocket *> i(cb.socketList); 5 while (i.hasNext()) 6 { 7 a = i.next(); 8 QObject::disconnect (a, 0, 0, 0); 9 cb.socketList.removeAll (a); 10 } 11 cb.socketList.clear (); 12 if (mainConnection->connectionState () != 13 MSN::NotificationServerConnection::NS_DISCONNECTED) 14 { 15 delete mainConnection; 16 mainConnection = NULL; 17 } 18 } If WlmServer::WlmDisconnect is called twice in a really short time frame between the if in line 1 and the delete in line 15 some time will passed and the second run of WlmServer::WlmDisconnect will enter the if and delete mainConnection object for a second time, which will cause Kopete to crash.