Bug 300934 - KWin crashed in scripting parser when config is changed fast
Summary: KWin crashed in scripting parser when config is changed fast
Status: RESOLVED FIXED
Alias: None
Product: kwin
Classification: Plasma
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: KWin default assignee
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-05-31 14:04 UTC by Christoph Feck
Modified: 2012-06-02 07:35 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In: 4.9


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Christoph Feck 2012-05-31 14:04:04 UTC
Application: kwin (4.8.3 (4.8.3))
KDE Platform Version: 4.8.3 (4.8.3) (Compiled from sources)
Qt Version: 4.8.2
Operating System: Linux 3.4.0-2-desktop i686
Distribution: "openSUSE 12.2 Milestone 4 (i586)"

-- Information about the crash:
What I was doing when the application crashed:
1. run "kcmshell4 style"
2. toggle "Show icons on buttons" in "Fine Tuning" tab
3. click apply
4. repeat steps 2 ... 3 fast until it crashes :)

(kwin from master branch)

The crash can be reproduced every time.

-- Backtrace:
Application: KWin (kdeinit4), signal: Segmentation fault
[Current thread is 1 (Thread 0xb52db980 (LWP 28617))]

Thread 3 (Thread 0xae460b40 (LWP 28625)):
[KCrash Handler]
#7  0xb5afdb2e in __memcmp_ia32 () from /lib/libc.so.6
#8  0xb6b25f83 in qstrcmp (str1=..., str2=...) at /local/git/Qt/frameworks/qt/src/corelib/tools/qbytearray.cpp:346
#9  0xb6f2384f in operator< (k1=..., k2=...) at /local/git/KDE/libs/kdelibs/kdecore/config/kconfigdata.h:122
#10 0xb6f26923 in qMapLessThanKey<KEntryKey> (key1=..., key2=...) at /local/qt4/include/QtCore/qmap.h:107
#11 0xb6f266f0 in QMap<KEntryKey, KEntry>::findNode (this=0x8d251a0, akey=...) at /local/qt4/include/QtCore/qmap.h:487
#12 0xb6f25154 in QMap<KEntryKey, KEntry>::find (this=0x8d251a0, akey=...) at /local/qt4/include/QtCore/qmap.h:608
#13 0xb6f23a97 in KEntryMap::findEntry (this=0x8d251a0, group=..., key=..., flags=...) at /local/git/KDE/libs/kdelibs/kdecore/config/kconfigdata.h:205
#14 0xb6f22b84 in KConfigPrivate::lookupData (this=0x8d25188, group=..., key=0x8f35bd8 "desktopchangeosdEnabled", flags=...) at /local/git/KDE/libs/kdelibs/kdecore/config/kconfig.cpp:870
#15 0xb6f2cab1 in KConfigGroup::readEntry (this=0x8df03c8, key=0x8f35bd8 "desktopchangeosdEnabled", aDefault=...) at /local/git/KDE/libs/kdelibs/kdecore/config/kconfiggroup.cpp:705
#16 0xb74300b9 in KConfigGroup::readCheck<bool> (this=0x8df03c8, key=0x8f35bd8 "desktopchangeosdEnabled", defaultValue=@0xae4600b7) at /local/git/KDE/libs/kdelibs/kdecore/config/kconfiggroup.h:724
#17 0xb746eabb in KConfigGroup::readEntry<bool> (this=0x8df03c8, key=..., aDefault=@0xae4600b7) at /local/git/KDE/libs/kdelibs/kdecore/config/kconfiggroup.h:249
#18 0xb7029afc in KPluginInfo::load (this=0xae46013c, config=...) at /local/git/KDE/libs/kdelibs/kdecore/services/kplugininfo.cpp:395
#19 0xaf409f10 in KWin::Scripting::queryScriptsToLoad (this=0x8f67480, conf=...) at /local/git/KDE/base/kde-workspace/kwin/scripting/scripting.cpp:410
#20 0xaf411e4f in QtConcurrent::StoredMemberFunctionPointerCall1<QList<QPair<bool, QPair<QString, QString> > >, KWin::Scripting, KConfigGroup&, KConfigGroup>::runFunctor (this=0x8df03a8) at /local/qt4/include/QtCore/qtconcurrentstoredfunctioncall.h:396
#21 0xaf411db2 in QtConcurrent::RunFunctionTask<QList<QPair<bool, QPair<QString, QString> > > >::run (this=0x8df03a8) at /local/qt4/include/QtCore/qtconcurrentrunbase.h:106
#22 0xb6b1351d in QThreadPoolThread::run (this=0x8da5400) at /local/git/Qt/frameworks/qt/src/corelib/concurrent/qthreadpool.cpp:107
#23 0xb6b23585 in QThreadPrivate::start (arg=0x8da5400) at /local/git/Qt/frameworks/qt/src/corelib/thread/qthread_unix.cpp:307
#24 0xb6a94e32 in start_thread () from /lib/libpthread.so.0
#25 0xb5b6c9ce in clone () from /lib/libc.so.6

Thread 2 (Thread 0xaccd2b40 (LWP 28630)):
#0  0xb77d7424 in __kernel_vsyscall ()
#1  0xb6a98e04 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#2  0xb6b249d5 in QWaitConditionPrivate::wait (this=0x8dafa58, time=30000) at /local/git/Qt/frameworks/qt/src/corelib/thread/qwaitcondition_unix.cpp:84
#3  0xb6b247f5 in QWaitCondition::wait (this=0x8dafa20, mutex=0x8dafa1c, time=30000) at /local/git/Qt/frameworks/qt/src/corelib/thread/qwaitcondition_unix.cpp:158
#4  0xb6b13664 in QThreadPoolThread::run (this=0x8f072c0) at /local/git/Qt/frameworks/qt/src/corelib/concurrent/qthreadpool.cpp:141
#5  0xb6b23585 in QThreadPrivate::start (arg=0x8f072c0) at /local/git/Qt/frameworks/qt/src/corelib/thread/qthread_unix.cpp:307
#6  0xb6a94e32 in start_thread () from /lib/libpthread.so.0
#7  0xb5b6c9ce in clone () from /lib/libc.so.6

Thread 1 (Thread 0xb52db980 (LWP 28617)):
#0  0xb77d7424 in __kernel_vsyscall ()
#1  0xb6a98a4c in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#2  0xb6b249ef in QWaitConditionPrivate::wait (this=0x8d85d20, time=4294967295) at /local/git/Qt/frameworks/qt/src/corelib/thread/qwaitcondition_unix.cpp:86
#3  0xb6b247f5 in QWaitCondition::wait (this=0x8dafa30, mutex=0x8dafa1c, time=4294967295) at /local/git/Qt/frameworks/qt/src/corelib/thread/qwaitcondition_unix.cpp:158
#4  0xb6b13fa9 in QThreadPoolPrivate::waitForDone (this=0x8daf9d0, msecs=-1) at /local/git/Qt/frameworks/qt/src/corelib/concurrent/qthreadpool.cpp:298
#5  0xb6b1441a in QThreadPool::~QThreadPool (this=0x8d58f60, __in_chrg=<optimized out>) at /local/git/Qt/frameworks/qt/src/corelib/concurrent/qthreadpool.cpp:440
#6  0xb6b1448d in QThreadPool::~QThreadPool (this=0x8d58f60, __in_chrg=<optimized out>) at /local/git/Qt/frameworks/qt/src/corelib/concurrent/qthreadpool.cpp:442
#7  0xb6b14a0f in QGlobalStaticDeleter<QThreadPool>::~QGlobalStaticDeleter (this=0xb6dffc98, __in_chrg=<optimized out>) at ../../include/QtCore/../../../../git/Qt/frameworks/qt/src/corelib/global/qglobal.h:1927
#8  0xb5ab3381 in __run_exit_handlers () from /lib/libc.so.6
#9  0xb5ab340d in exit () from /lib/libc.so.6
#10 0xb5fd97c5 in qt_xio_errhandler () at /local/git/Qt/frameworks/qt/src/gui/kernel/qapplication_x11.cpp:770
#11 0xb750e2d5 in KApplication::xioErrhandler (this=0xbf836d90, dpy=0x8ce5e70) at /local/git/KDE/libs/kdelibs/kdeui/kernel/kapplication.cpp:419
#12 0xb750d5c0 in kde_xio_errhandler (dpy=0x8ce5e70) at /local/git/KDE/libs/kdelibs/kdeui/kernel/kapplication.cpp:126
#13 0xb71eb474 in _XIOError () from /usr/lib/libX11.so.6
#14 0xb71e924e in _XReply () from /usr/lib/libX11.so.6
#15 0xb71e456b in XSync () from /usr/lib/libX11.so.6
#16 0xaf3db529 in KWin::SceneXrender::flushBuffer (this=0x8e05ea0, mask=8, damage=...) at /local/git/KDE/base/kde-workspace/kwin/scene_xrender.cpp:207
#17 0xaf3db37e in KWin::SceneXrender::paint (this=0x8e05ea0, damage=..., toplevels=...) at /local/git/KDE/base/kde-workspace/kwin/scene_xrender.cpp:189
#18 0xaf3ce39a in KWin::Workspace::performCompositing (this=0x8dae9d8) at /local/git/KDE/base/kde-workspace/kwin/composite.cpp:433
#19 0xaf3ce06e in KWin::Workspace::timerEvent (this=0x8dae9d8, te=0xbf836a74) at /local/git/KDE/base/kde-workspace/kwin/composite.cpp:391
#20 0xb6c5f1f0 in QObject::event (this=0x8dae9d8, e=0xbf836a74) at /local/git/Qt/frameworks/qt/src/corelib/kernel/qobject.cpp:1157
#21 0xb5f54280 in QApplicationPrivate::notify_helper (this=0x8ccf0f8, receiver=0x8dae9d8, e=0xbf836a74) at /local/git/Qt/frameworks/qt/src/gui/kernel/qapplication.cpp:4551
#22 0xb5f51b04 in QApplication::notify (this=0xbf836d90, receiver=0x8dae9d8, e=0xbf836a74) at /local/git/Qt/frameworks/qt/src/gui/kernel/qapplication.cpp:3933
#23 0xb750da8a in KApplication::notify (this=0xbf836d90, receiver=0x8dae9d8, event=0xbf836a74) at /local/git/KDE/libs/kdelibs/kdeui/kernel/kapplication.cpp:311
#24 0xaf3762b4 in KWin::Application::notify (this=0xbf836d90, o=0x8dae9d8, e=0xbf836a74) at /local/git/KDE/base/kde-workspace/kwin/main.cpp:371
#25 0xb6c480a6 in QCoreApplication::notifyInternal (this=0xbf836d90, receiver=0x8dae9d8, event=0xbf836a74) at /local/git/Qt/frameworks/qt/src/corelib/kernel/qcoreapplication.cpp:915
#26 0xb6c4b91f in QCoreApplication::sendEvent (receiver=0x8dae9d8, event=0xbf836a74) at ../../include/QtCore/../../../../git/Qt/frameworks/qt/src/corelib/kernel/qcoreapplication.h:231
#27 0xb6c82839 in QTimerInfoList::activateTimers (this=0x8ccf87c) at /local/git/Qt/frameworks/qt/src/corelib/kernel/qeventdispatcher_unix.cpp:611
#28 0xb6c83578 in QEventDispatcherUNIX::activateTimers (this=0x8ccb748) at /local/git/Qt/frameworks/qt/src/corelib/kernel/qeventdispatcher_unix.cpp:868
#29 0xb6c83893 in QEventDispatcherUNIX::processEvents (this=0x8ccb748, flags=...) at /local/git/Qt/frameworks/qt/src/corelib/kernel/qeventdispatcher_unix.cpp:930
#30 0xb602070c in QEventDispatcherX11::processEvents (this=0x8ccb748, flags=...) at /local/git/Qt/frameworks/qt/src/gui/kernel/qeventdispatcher_x11.cpp:152
#31 0xb6c45755 in QEventLoop::processEvents (this=0xbf836cdc, flags=...) at /local/git/Qt/frameworks/qt/src/corelib/kernel/qeventloop.cpp:149
#32 0xb6c458cd in QEventLoop::exec (this=0xbf836cdc, flags=...) at /local/git/Qt/frameworks/qt/src/corelib/kernel/qeventloop.cpp:204
#33 0xb6c4873c in QCoreApplication::exec () at /local/git/Qt/frameworks/qt/src/corelib/kernel/qcoreapplication.cpp:1187
#34 0xb5f51796 in QApplication::exec () at /local/git/Qt/frameworks/qt/src/gui/kernel/qapplication.cpp:3812
#35 0xaf377498 in kdemain (argc=1, argv=0x8c939a0) at /local/git/KDE/base/kde-workspace/kwin/main.cpp:545
#36 0x0804decc in launch (argc=1, _name=0x8c2cdcc "kwin", args=0x8c2cdd1 "\001", cwd=0x0, envc=1, envs=0x8c2cde0 "", reset_env=false, tty=0x0, avoid_loops=false, startup_id_str=0x8053759 "0") at /local/git/KDE/libs/kdelibs/kinit/kinit.cpp:734
#37 0x0804ef33 in handle_launcher_request (sock=7, who=0x80539f4 "launcher") at /local/git/KDE/libs/kdelibs/kinit/kinit.cpp:1226
#38 0x0804f6ad in handle_requests (waitForPid=0) at /local/git/KDE/libs/kdelibs/kinit/kinit.cpp:1419
#39 0x08051073 in main (argc=3, argv=0xbf837564, envp=0xbf837574) at /local/git/KDE/libs/kdelibs/kinit/kinit.cpp:1907

Possible duplicates by query: bug 279834.

Reported using DrKonqi
Comment 1 Thomas Lübking 2012-05-31 14:59:49 UTC
https://git.reviewboard.kde.org/r/104866/
and following
https://git.reviewboard.kde.org/r/104901/

none of them really fixes it while i'd say it's more robust on the heap
(my statement in one of the reviews is btw. wrong, there's no non const iterator involved)
Comment 2 Thomas Lübking 2012-06-02 07:35:11 UTC
Git commit 67a7d9be74f287331ef21dd60d52ac1857b8cc7a by Thomas Lübking.
Committed on 02/06/2012 at 09:33.
Pushed by luebking into branch 'master'.

don't use kconfiggroup in threaded script loading at all
FIXED-IN: 4.9
REVIEW: 105128

M  +5    -4    kwin/scripting/scripting.cpp
M  +1    -1    kwin/scripting/scripting.h

http://commits.kde.org/kde-workspace/67a7d9be74f287331ef21dd60d52ac1857b8cc7a