Bug 251131

Summary: Plasma desktop crashed while using Thunderbird
Product: [Unmaintained] plasma4 Reporter: morley_steve
Component: widget-pagerAssignee: Plasma Bugs List <plasma-bugs>
Status: RESOLVED FIXED    
Severity: crash CC: aseigo, cfeck, l.lunak, laidig
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Ubuntu   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description morley_steve 2010-09-13 18:36:37 UTC
Application: plasma-desktop (0.3)
KDE Platform Version: 4.4.2 (KDE 4.4.2)
Qt Version: 4.6.2
Operating System: Linux 2.6.32-24-generic x86_64
Distribution: Ubuntu 10.04.1 LTS

-- Information about the crash:
On moving from a compose window back to the main Thunderbird (3.0.7) window to open a new message, the desktop went black, reset and the crash handler popped up.
Other open applications: Google Chrome, Kate and a Konsole window.

 -- Backtrace:
Application: Plasma Workspace (kdeinit4), signal: Segmentation fault
[Current thread is 1 (Thread 0x7fc9b3f2d760 (LWP 1884))]

Thread 2 (Thread 0x7fc98a90b710 (LWP 1887)):
#0  0x00007fc9b0f1efb3 in *__GI___poll (fds=<value optimized out>, nfds=<value optimized out>, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:87
#1  0x00007fc9ad8e34a9 in ?? () from /lib/libglib-2.0.so.0
#2  0x00007fc9ad8e38fc in g_main_context_iteration () from /lib/libglib-2.0.so.0
#3  0x00007fc9b2527566 in QEventDispatcherGlib::processEvents (this=0x226a290, flags=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:414
#4  0x00007fc9b24fc992 in QEventLoop::processEvents (this=<value optimized out>, flags=) at kernel/qeventloop.cpp:149
#5  0x00007fc9b24fcd6c in QEventLoop::exec (this=0x7fc98a90adb0, flags=) at kernel/qeventloop.cpp:201
#6  0x00007fc9b2406d59 in QThread::exec (this=<value optimized out>) at thread/qthread.cpp:487
#7  0x00007fc9b24dd178 in QInotifyFileSystemWatcherEngine::run (this=0x2273d30) at io/qfilesystemwatcher_inotify.cpp:248
#8  0x00007fc9b2409775 in QThreadPrivate::start (arg=0x2273d30) at thread/qthread_unix.cpp:248
#9  0x00007fc9b21799ca in start_thread (arg=<value optimized out>) at pthread_create.c:300
#10 0x00007fc9b0f2b72d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#11 0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7fc9b3f2d760 (LWP 1884)):
[KCrash Handler]
#5  0x0000000000000001 in ?? ()
#6  0x00007fc988e173ed in ~QHashNode (node=0x34381f0) at /usr/include/qt4/QtCore/qhash.h:217
#7  QHash<QString, Solid::Device>::deleteNode2 (node=0x34381f0) at /usr/include/qt4/QtCore/qhash.h:518
#8  0x00007fc9b24259bd in QHashData::free_helper (this=0x25b69a0, node_delete=0x7fc988e173e0 <QHash<QString, Solid::Device>::deleteNode2(QHashData::Node*)>) at tools/qhash.cpp:275
#9  0x00007fc988e13b16 in QHash<QString, Solid::Device>::freeData (this=0x26a5900, __in_chrg=<value optimized out>) at /usr/include/qt4/QtCore/qhash.h:567
#10 ~QHash (this=0x26a5900, __in_chrg=<value optimized out>) at /usr/include/qt4/QtCore/qhash.h:284
#11 ~HotplugEngine (this=0x26a5900, __in_chrg=<value optimized out>) at ../../../../../plasma/generic/dataengines/hotplug/hotplugengine.cpp:55
#12 0x00007fc9aaf09f5e in ~DataEngineManagerPrivate (this=0x22b5380, __in_chrg=<value optimized out>) at ../../plasma/dataenginemanager.cpp:54
#13 ~DataEngineManager (this=0x22b5380, __in_chrg=<value optimized out>) at ../../plasma/dataenginemanager.cpp:93
#14 0x00007fc9aaf0a0e7 in ~DataEngineManagerSingleton () at ../../plasma/dataenginemanager.cpp:74
#15 destroy () at ../../plasma/dataenginemanager.cpp:79
#16 0x00007fc9b0e7e262 in __run_exit_handlers (status=1) at exit.c:78
#17 *__GI_exit (status=1) at exit.c:100
#18 0x00007fc9b1710558 in qt_xio_errhandler () at kernel/qapplication_x11.cpp:734
#19 0x00007fc9b2a45288 in KApplication::xioErrhandler (this=0x1ab9260, dpy=0x1ad4520) at ../../kdeui/kernel/kapplication.cpp:408
#20 0x00007fc9b33687fe in _XIOError (dpy=0x1ad4520) at ../../src/XlibInt.c:3138
#21 0x00007fc9b3370ada in _XReply (dpy=0x1ad4520, rep=0x7fffcc1b6510, extra=0, discard=0) at ../../src/xcb_io.c:522
#22 0x00007fc9b334d697 in XGetWindowProperty (dpy=0x1ad4520, w=<value optimized out>, property=307, offset=0, length=2048, delete=28105664, req_type=4, actual_type=0x7fffcc1b6660, 
    actual_format=0x7fffcc1b666c, nitems=0x7fffcc1b6658, bytesafter=0x7fffcc1b6650, prop=0x7fffcc1b6648) at ../../src/GetProp.c:64
#23 0x00007fc9b2b88324 in NETWinInfo::update (this=0x31be6f0, dirty_props=<value optimized out>) at ../../kdeui/windowmanagement/netwm.cpp:3949
#24 0x00007fc9b2b8291d in KWindowInfo (this=0x7fffcc1b67b0, _win=65061388, properties=18446744071965638656, properties2=<value optimized out>) at ../../kdeui/windowmanagement/kwindowinfo_x11.cpp:74
#25 0x00007fc9b2b7e589 in KWindowSystem::windowInfo (win=140503561630688, properties=18446744073709551360, properties2=18446744073709006264) at ../../kdeui/windowmanagement/kwindowsystem_x11.cpp:388
#26 0x00007fc992792272 in Pager::windowRemoved (this=0x20a2580, id=140503561630688) at ../../../../../plasma/desktop/applets/pager/pager.cpp:634
#27 0x00007fc992797a94 in Pager::qt_metacall (this=0x20a2580, _c=QMetaObject::InvokeMetaMethod, _id=<value optimized out>, _a=0x7fffcc1b6900) at ./pager.moc:146
#28 0x00007fc9b2510e3f in QMetaObject::activate (sender=0x1dfbb30, m=<value optimized out>, local_signal_index=<value optimized out>, argv=0xfffffffffff7adb8) at kernel/qobject.cpp:3293
#29 0x00007fc9b2b7d4f2 in KWindowSystem::windowRemoved (this=0x338ce90, _t1=65061388) at ./kwindowsystem.moc:133
#30 0x00007fc9b2b802fa in KWindowSystemPrivate::removeClient (this=0x1e37b40, w=65061388) at ../../kdeui/windowmanagement/kwindowsystem_x11.cpp:249
#31 0x00007fc9b2b8e3ad in NETRootInfo::update (this=0x1e37b68, dirty_props=<value optimized out>) at ../../kdeui/windowmanagement/netwm.cpp:2193
#32 0x00007fc9b2b8f0f3 in NETRootInfo::event (this=0x1e37b68, event=<value optimized out>, properties=0x7fffcc1b6c10, properties_size=5) at ../../kdeui/windowmanagement/netwm.cpp:2068
#33 0x00007fc9b2b805ac in KWindowSystemPrivate::x11Event (this=0x1e37b40, ev=0x7fffcc1b73d0) at ../../kdeui/windowmanagement/kwindowsystem_x11.cpp:136
#34 0x00007fc9b2a44d06 in KAppX11HackWidget::publicx11Event (this=<value optimized out>, _event=0x7fffcc1b73d0) at ../../kdeui/kernel/kapplication.cpp:903
#35 KApplication::x11EventFilter (this=<value optimized out>, _event=0x7fffcc1b73d0) at ../../kdeui/kernel/kapplication.cpp:953
#36 0x00007fc9a5d458c7 in PlasmaApp::x11EventFilter (this=0x1ab9260, event=0x7fffcc1b73d0) at ../../../../plasma/desktop/shell/plasmaapp.cpp:600
#37 0x00007fc9b170f641 in qt_x11EventFilter (ev=0x7fffcc1b73d0) at kernel/qapplication_x11.cpp:399
#38 0x00007fc9b171e191 in QApplication::x11ProcessEvent (this=<value optimized out>, event=0x7fffcc1b73d0) at kernel/qapplication_x11.cpp:3231
#39 0x00007fc9b174a882 in x11EventSourceDispatch (s=0x1ad2e70, callback=<value optimized out>, user_data=<value optimized out>) at kernel/qguieventdispatcher_glib.cpp:146
#40 0x00007fc9ad8df8c2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#41 0x00007fc9ad8e3748 in ?? () from /lib/libglib-2.0.so.0
#42 0x00007fc9ad8e38fc in g_main_context_iteration () from /lib/libglib-2.0.so.0
#43 0x00007fc9b2527513 in QEventDispatcherGlib::processEvents (this=0x1a4b140, flags=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:412
#44 0x00007fc9b174a46e in QGuiEventDispatcherGlib::processEvents (this=0x338ce90, flags=<value optimized out>) at kernel/qguieventdispatcher_glib.cpp:204
#45 0x00007fc9b24fc992 in QEventLoop::processEvents (this=<value optimized out>, flags=) at kernel/qeventloop.cpp:149
#46 0x00007fc9b24fcd6c in QEventLoop::exec (this=0x7fffcc1b7700, flags=) at kernel/qeventloop.cpp:201
#47 0x00007fc9b2500aab in QCoreApplication::exec () at kernel/qcoreapplication.cpp:981
#48 0x00007fc9a5d33fb2 in kdemain (argc=<value optimized out>, argv=<value optimized out>) at ../../../../plasma/desktop/shell/main.cpp:112
#49 0x00000000004070f3 in launch (argc=1, _name=<value optimized out>, args=<value optimized out>, cwd=<value optimized out>, envc=0, envs=<value optimized out>, reset_env=false, tty=0x0, 
    avoid_loops=false, startup_id_str=0x40a4f9 "0") at ../../kinit/kinit.cpp:717
#50 0x0000000000407cb0 in handle_launcher_request (sock=8, who=<value optimized out>) at ../../kinit/kinit.cpp:1209
#51 0x000000000040823a in handle_requests (waitForPid=0) at ../../kinit/kinit.cpp:1402
#52 0x0000000000408e22 in main (argc=4, argv=<value optimized out>, envp=<value optimized out>) at ../../kinit/kinit.cpp:1845

Reported using DrKonqi
Comment 1 Aaron J. Seigo 2010-09-14 00:58:10 UTC
SVN commit 1175028 by aseigo:

remove an unused bit of bookkeeping; seems to cause a crash on some systems due to an XIO error (though i'd expect NETWinInfo to protect against such things? hm..)
BUG:251131


 M  +0 -25     pager.cpp  
 M  +0 -1      pager.h  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1175028
Comment 2 Aaron J. Seigo 2010-09-14 01:01:48 UTC
SVN commit 1175029 by aseigo:

remove an unused bit of bookkeeping; seems to cause a crash on some systems due to an XIO error (though i'd expect NETWinInfo to protect against such things? hm..)
BUG:251131


 M  +0 -25     pager.cpp  
 M  +0 -1      pager.h  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1175029
Comment 3 Christoph Feck 2010-09-14 01:51:09 UTC
Looks like NET/KWindowInfo stuff does not handle the reentrancy visible in the backtrace, similar to bug 170519. Adding Lubos for some inspection.
Comment 4 Lubos Lunak 2010-09-14 17:16:49 UTC
XIO error usually means
- the X server disconnected
- threading problems
Comment 5 Christoph Feck 2010-09-14 17:43:15 UTC
Lubos, I wasn't talking about the XIO error, but about the reentrancy problem. If you look at the backtrace, you see that

NETRootInfo::update() emits
KWindowSystem::windowRemoved() which in turn activates
Pager::windowRemoved() that ultimatively calls into
KWindowSystem::windowInfo() which calls
NETWinInfo::update() an causes a crash.

(note NETWinInfo != NETRootInfo, which could be the reason why it was not fixed by r1000474, which only handled reentrancy inside NETRootInfo alone).
Comment 6 Lubos Lunak 2010-09-15 15:23:10 UTC
There is no reentrancy, NETRootInfo::update() != NETWinInfo::update(). What I said above still stands, even if there was reentrancy.
Comment 7 Aaron J. Seigo 2010-09-15 20:00:53 UTC
SVN commit 1175732 by aseigo:

remove the access to kwininfo, that's the important bit, actually
CCBUG:251131


 M  +0 -4      pager.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1175732
Comment 8 Aaron J. Seigo 2010-09-15 20:02:28 UTC
SVN commit 1175733 by aseigo:

remove the access to kwininfo, that's the important bit, actually
CCBUG:251131


 M  +0 -4      pager.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1175733
Comment 9 Aaron J. Seigo 2010-09-15 20:04:36 UTC
the issue in this particular case is that it was (unnecessarily, it turns out) asking for the window information on a window that no longer existed. this is apparently what triggered the problem.

it was asking for a KWinInfo using the WId passed into a slot from the WindowSystem::windowRemoved(WId) signal.

there is no reentrancy in this case (it's all in the gui thread and with no recursive calls) and the x server seems to still have been connected to plasma-desktop.
Comment 10 Lubos Lunak 2010-09-16 14:02:23 UTC
No, that's not the important bit, either. Once more: X IO errors are only caused by problems with the X connection, either the connection going away, or getting corrupted. The first one is caused by (remote) connection problem or X going away/crashing, the second is a corruption of the data, usually caused by threading problems when accessing the X connection.
This commit at most removes the place where the X problem showed up, but presumably the X IO error then would show up somewhere else later if exactly the same happens again. Accessing a non-existing window generates a non-IO X error, which is handled by the library.
Comment 11 Aaron J. Seigo 2010-09-16 18:37:16 UTC
odd question for the people reporting this bug: are you using an SVG wallpaper?
Comment 12 morley_steve 2010-09-16 19:28:28 UTC
No, the wallpapers are jpgs - probably should've noted that I'm dual screen using twinview.