Bug 284989 - plasma-desktop crashes on computer shutdown
Summary: plasma-desktop crashes on computer shutdown
Status: RESOLVED FIXED
Alias: None
Product: plasma4
Classification: Unclassified
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR crash with 20 votes (vote)
Target Milestone: ---
Assignee: Plasma Bugs List
URL:
Keywords:
: 282934 283620 (view as bug list)
Depends on:
Blocks:
 
Reported: 2011-10-26 08:10 UTC by Hussam Al-Tayeb
Modified: 2012-01-02 11:14 UTC (History)
17 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
Hotfix (430 bytes, patch)
2011-11-04 08:16 UTC, Christoph Feck
Details
New crash information added by DrKonqi (2.56 KB, text/plain)
2011-11-07 11:32 UTC, Romain Cosson
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Hussam Al-Tayeb 2011-10-26 08:10:50 UTC
Application: plasma-desktop (0.4)
KDE Platform Version: 4.7.2 (4.7.2) (Compiled from sources)
Qt Version: 4.8.0
Operating System: Linux 3.1.0-1-ARCH i686
Distribution (Platform): Archlinux Packages

-- Information about the crash:
- What I was doing when the application crashed:
I was logging off kde and shutting down my computer and plasma-desktop crashed.

The crash can be reproduced some of the time.

-- Backtrace:
Application: Plasma Desktop Shell (plasma-desktop), signal: Segmentation fault
[Current thread is 1 (Thread 0xafbfd960 (LWP 22066))]

Thread 2 (Thread 0xa7b88b70 (LWP 22067)):
#0  0xb273fd00 in clock_gettime () from /lib/librt.so.1
#1  0xb622c0f5 in do_gettime (frac=0xa7b87f30, sec=0xa7b87f28) at tools/qelapsedtimer_unix.cpp:123
#2  qt_gettime () at tools/qelapsedtimer_unix.cpp:140
#3  0xb6320776 in QTimerInfoList::updateCurrentTime (this=0xa7201a74) at kernel/qeventdispatcher_unix.cpp:343
#4  0xb6320b4a in QTimerInfoList::timerWait (this=0xa7201a74, tm=...) at kernel/qeventdispatcher_unix.cpp:450
#5  0xb631ef83 in timerSourcePrepareHelper (src=<optimized out>, timeout=0xa7b8803c) at kernel/qeventdispatcher_glib.cpp:136
#6  0xb631f01d in timerSourcePrepare (source=0xa7201a40, timeout=<optimized out>) at kernel/qeventdispatcher_glib.cpp:169
#7  0xb26865dc in g_main_context_prepare () from /usr/lib/libglib-2.0.so.0
#8  0xb2687387 in ?? () from /usr/lib/libglib-2.0.so.0
#9  0xb268797a in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#10 0xb631fb97 in QEventDispatcherGlib::processEvents (this=0x92a6188, flags=...) at kernel/qeventdispatcher_glib.cpp:426
#11 0xb62e785d in QEventLoop::processEvents (this=0xa7b881c0, flags=...) at kernel/qeventloop.cpp:149
#12 0xb62e7af9 in QEventLoop::exec (this=0xa7b881c0, flags=...) at kernel/qeventloop.cpp:204
#13 0xb61c3c6d in QThread::exec (this=0x92a7410) at thread/qthread.cpp:501
#14 0xb62c2663 in QInotifyFileSystemWatcherEngine::run (this=0x92a7410) at io/qfilesystemwatcher_inotify.cpp:248
#15 0xb61c6fba in QThreadPrivate::start (arg=0x92a7410) at thread/qthread_unix.cpp:298
#16 0xb1bf570c in ?? () from /usr/lib/libGL.so.1
#17 0x00000000 in ?? ()

Thread 1 (Thread 0xafbfd960 (LWP 22066)):
[KCrash Handler]
#7  0x00000000 in ?? ()
#8  0xb73543b6 in qDeleteAll<QList<Plasma::Applet*>::const_iterator> (begin=..., end=...) at /usr/include/QtCore/qalgorithms.h:322
#9  0xb7354c15 in qDeleteAll<QList<Plasma::Applet*> > (c=...) at /usr/include/QtCore/qalgorithms.h:330
#10 0xb7357e91 in Plasma::ContainmentPrivate::~ContainmentPrivate (this=0x8f7e908, __in_chrg=<optimized out>) at /home/hussam/packages/kdelibs/src/kdelibs/plasma/private/containment_p.h:70
#11 0xb734f285 in Plasma::Containment::~Containment (this=0x8f89810, __in_chrg=<optimized out>) at /home/hussam/packages/kdelibs/src/kdelibs/plasma/containment.cpp:148
#12 0xad3c4a95 in Panel::~Panel (this=0x8f89810, __in_chrg=<optimized out>) at /home/hussam/packages/kdebase-workspace/src/kde-workspace/plasma/desktop/containments/panel/panel.cpp:127
#13 0xad3c4ae2 in Panel::~Panel (this=0x8f89810, __in_chrg=<optimized out>) at /home/hussam/packages/kdebase-workspace/src/kde-workspace/plasma/desktop/containments/panel/panel.cpp:129
#14 0xb73628a6 in qDeleteAll<QList<Plasma::Containment*>::const_iterator> (begin=..., end=...) at /usr/include/QtCore/qalgorithms.h:322
#15 0xb7362b25 in qDeleteAll<QList<Plasma::Containment*> > (c=...) at /usr/include/QtCore/qalgorithms.h:330
#16 0xb735f490 in Plasma::CoronaPrivate::~CoronaPrivate (this=0x8ea9890, __in_chrg=<optimized out>) at /home/hussam/packages/kdelibs/src/kdelibs/plasma/corona.cpp:805
#17 0xb735f5ac in Plasma::Corona::~Corona (this=0x8ea5188, __in_chrg=<optimized out>) at /home/hussam/packages/kdelibs/src/kdelibs/plasma/corona.cpp:82
#18 0xb777f184 in DesktopCorona::~DesktopCorona (this=0x8ea5188, __in_chrg=<optimized out>) at /home/hussam/packages/kdebase-workspace/src/kde-workspace/plasma/desktop/shell/desktopcorona.cpp:70
#19 0xb777f1b2 in DesktopCorona::~DesktopCorona (this=0x8ea5188, __in_chrg=<optimized out>) at /home/hussam/packages/kdebase-workspace/src/kde-workspace/plasma/desktop/shell/desktopcorona.cpp:73
#20 0xb77a694e in PlasmaApp::cleanup (this=0x8cc95c8) at /home/hussam/packages/kdebase-workspace/src/kde-workspace/plasma/desktop/shell/plasmaapp.cpp:381
#21 0xb77aa7cd in PlasmaApp::qt_static_metacall (_o=0x8cc95c8, _c=QMetaObject::InvokeMetaMethod, _id=15, _a=0xbfe76d70) at /home/hussam/packages/kdebase-workspace/src/build/plasma/desktop/shell/plasmaapp.moc:120
#22 0xb6301449 in QMetaObject::activate (sender=0x8cc95c8, m=0xb6454380, local_signal_index=0, argv=0x0) at kernel/qobject.cpp:3546
#23 0xb635b145 in QCoreApplication::aboutToQuit (this=0x8cc95c8) at .moc/debug-shared/moc_qcoreapplication.cpp:145
#24 0xb62ed798 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1153
#25 0xb56d9854 in QApplication::exec () at kernel/qapplication.cpp:3779
#26 0xb778d311 in kdemain (argc=1, argv=0xbfe76ff4) at /home/hussam/packages/kdebase-workspace/src/kde-workspace/plasma/desktop/shell/main.cpp:120
#27 0x0804852b in main (argc=1, argv=0xbfe76ff4) at /home/hussam/packages/kdebase-workspace/src/build/plasma/desktop/shell/plasma-desktop_dummy.cpp:3

Possible duplicates by query: bug 282934, bug 259639, bug 258867.

Reported using DrKonqi
Comment 1 Hussam Al-Tayeb 2011-10-26 08:13:00 UTC
This crash started happening after rebuilding, kdelibs, kde-workspace, kde-runtime, etc.. under QT 4.8.0rc1.
Comment 2 Christoph Feck 2011-10-26 14:55:04 UTC
I am seeing multiple applications crashing on exit in qDeleteAll (Kontact, Plasma, Okular) with Qt 4.8, so I am pretty sure it is a Qt issue.
Comment 3 Christoph Feck 2011-10-26 14:58:50 UTC
*** Bug 282934 has been marked as a duplicate of this bug. ***
Comment 4 Hussam Al-Tayeb 2011-10-26 17:00:23 UTC
(In reply to comment #2)
> I am seeing multiple applications crashing on exit in qDeleteAll (Kontact,
> Plasma, Okular) with Qt 4.8, so I am pretty sure it is a Qt issue.

Any upsteam Qt bug report about this? where do I file one?
Comment 5 Hussam Al-Tayeb 2011-10-26 17:00:55 UTC
I meant to type upstream* ...sorry for the spam.
Comment 6 Christoph Feck 2011-10-26 21:30:41 UTC
The address to report Qt bugs would be https://bugreports.qt.nokia.com/secure/Dashboard.jspa

Be prepared to have a minimal test case that reproduces the crash at hand :/
Comment 7 Christoph Feck 2011-10-28 00:01:58 UTC
*** Bug 283620 has been marked as a duplicate of this bug. ***
Comment 8 Rex Dieter 2011-10-28 17:27:01 UTC
Qt (upstream) bug,
https://bugreports.qt.nokia.com/browse/QTBUG-22037
Comment 9 Hussam Al-Tayeb 2011-10-29 12:16:26 UTC
looks like it is not a Qt bug.
https://bugreports.qt.nokia.com/browse/QTBUG-22037?focusedCommentId=166816&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-166816
says "this change is known to reveal bugs in the usage of qlist; several places in qt itself had to be fixed as well."
Comment 10 Christoph Feck 2011-10-29 12:34:16 UTC
Yep, I already found the place to fix for Kontact, now lets find the other culprits (I probably should add KWin to comment #2 ...)
Comment 11 Christoph Feck 2011-11-04 08:16:43 UTC
Created attachment 65222 [details]
Hotfix

This fixes the crash for me, but it is only a workaround. Somewhere, the applet list gets modified while the applets are deleted.
Comment 12 Romain Cosson 2011-11-07 11:32:58 UTC
Created attachment 65336 [details]
New crash information added by DrKonqi

plasma-desktop (0.4) on KDE Platform 4.7.3 (4.7.3) using Qt 4.8.0

- What I was doing when the application crashed:
Shutdown via the graphical interface
- Custom settings of the application:
Applets: knetworkmanager, printing

-- Backtrace (Reduced):
#7  0x00007f57263fe1ef in Plasma::Containment::~Containment() () from /usr/lib/libplasma.so.3
[...]
#10 0x00007f5726411524 in Plasma::Corona::~Corona() () from /usr/lib/libplasma.so.3
[...]
#15 0x00007f572fbc3305 in QCoreApplication::exec() () from /usr/lib/libQtCore.so.4
#16 0x00007f571dabb173 in kdemain () from /usr/lib/libkdeinit4_plasma-desktop.so
#17 0x00000000004082f4 in _start ()
Comment 13 Hrvoje Senjan 2011-11-21 00:09:25 UTC
Cristoph, i can confirm your patch works for me also. 4.7.3 built against qt 4.8
Comment 14 Beat Wolf 2011-11-21 22:49:08 UTC
could you post a proper patch on:
https://git.reviewboard.kde.org

here those patches usually get lost
Comment 15 Ben Cooksley 2011-11-22 08:18:43 UTC
Git commit f02884d36bc6ff4db4453b43d088c7226acfdf6e by Ben Cooksley.
Committed on 22/11/2011 at 09:14.
Pushed by bcooksley into branch 'KDE/4.7'.

Don't crash on exit.
BUG:284989
REVIEW:103202

M  +5    -1    plasma/private/containment_p.h

http://commits.kde.org/kdelibs/f02884d36bc6ff4db4453b43d088c7226acfdf6e
Comment 16 Kevin Kofler 2011-12-13 21:58:37 UTC
These "fixes" which replace qDeleteAll by a manual loop are most definitely only workarounds.

There are 3 possibilities:
(a) Qt is broken. But ossi says the code is not broken, and not having found any fault after proofreading it at least 3 times, I tend to believe him unless proven otherwise. If Qt is broken, this needs to get fixed in Qt.
(b) Qt is getting miscompiled by g++. So far, no evidence of this, but it is a possibility that shouldn't be ignored, and it tends to be hard to figure out that kind of stuff. If that's the case, this needs to get fixed in g++.
(c) The list is somehow already in an invalid state when qDeleteAll is called. If that's the case, the code which puts it into that invalid state needs to get fixed.

Either way, the "fix" is not the real fix, and closing the bug is deceptive and misleading.