Application: plasmashell (5.8.3) Qt Version: 5.7.0 Frameworks Version: 5.28.0 Operating System: Linux 4.8.8-2-ARCH x86_64 Distribution (Platform): Archlinux Packages -- Information about the crash: - What I was doing when the application crashed: I updated some packages (with pacman) and while upgrading an unrelated package (not sure between networkmanager-qt and oxygen-icons), plasma crashed. I noticed that plasmaframework updated a bit before so it could be the source of the crash. I haven't come across another crash yet. -- Backtrace: Application: Plasma (plasmashell), signal: Aborted Using host libthread_db library "/usr/lib/libthread_db.so.1". [Current thread is 1 (Thread 0x7f337b527800 (LWP 5664))] Thread 10 (Thread 0x7f32ad4b0700 (LWP 6071)): #0 0x00007f336ff37dd4 in g_mutex_unlock () at /usr/lib/libglib-2.0.so.0 #1 0x00007f336fef2171 in g_main_context_check () at /usr/lib/libglib-2.0.so.0 #2 0x00007f336fef2724 in () at /usr/lib/libglib-2.0.so.0 #3 0x00007f336fef289c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0 #4 0x00007f337554c72b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #5 0x00007f33754f623a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #6 0x00007f33753190f3 in QThread::exec() () at /usr/lib/libQt5Core.so.5 #7 0x00007f32af9dc0a7 in KCupsConnection::run() () at /usr/lib/libkcupslib.so #8 0x00007f337531dd78 in () at /usr/lib/libQt5Core.so.5 #9 0x00007f337442d454 in start_thread () at /usr/lib/libpthread.so.0 #10 0x00007f3374c337df in clone () at /usr/lib/libc.so.6 Thread 9 (Thread 0x7f32c21c8700 (LWP 5880)): #0 0x00007f33753152e9 in QMutex::unlock() () at /usr/lib/libQt5Core.so.5 #1 0x00007f337554c015 in () at /usr/lib/libQt5Core.so.5 #2 0x00007f336fef2179 in g_main_context_check () at /usr/lib/libglib-2.0.so.0 #3 0x00007f336fef2724 in () at /usr/lib/libglib-2.0.so.0 #4 0x00007f336fef289c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0 #5 0x00007f337554c72b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #6 0x00007f33754f623a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #7 0x00007f33753190f3 in QThread::exec() () at /usr/lib/libQt5Core.so.5 #8 0x00007f337921b856 in () at /usr/lib/libQt5Quick.so.5 #9 0x00007f337531dd78 in () at /usr/lib/libQt5Core.so.5 #10 0x00007f337442d454 in start_thread () at /usr/lib/libpthread.so.0 #11 0x00007f3374c337df in clone () at /usr/lib/libc.so.6 Thread 8 (Thread 0x7f32c7b35700 (LWP 5869)): #0 0x00007f337443310f in pthread_cond_wait@@GLIBC_2.3.2 () at /usr/lib/libpthread.so.0 #1 0x00007f32cb961ec3 in () at /usr/lib/xorg/modules/dri/swrast_dri.so #2 0x00007f32cb961d27 in () at /usr/lib/xorg/modules/dri/swrast_dri.so #3 0x00007f337442d454 in start_thread () at /usr/lib/libpthread.so.0 #4 0x00007f3374c337df in clone () at /usr/lib/libc.so.6 Thread 7 (Thread 0x7f32c8336700 (LWP 5868)): #0 0x00007f337443310f in pthread_cond_wait@@GLIBC_2.3.2 () at /usr/lib/libpthread.so.0 #1 0x00007f32cb961ec3 in () at /usr/lib/xorg/modules/dri/swrast_dri.so #2 0x00007f32cb961d27 in () at /usr/lib/xorg/modules/dri/swrast_dri.so #3 0x00007f337442d454 in start_thread () at /usr/lib/libpthread.so.0 #4 0x00007f3374c337df in clone () at /usr/lib/libc.so.6 Thread 6 (Thread 0x7f3355900700 (LWP 5866)): #0 0x00007f337443310f in pthread_cond_wait@@GLIBC_2.3.2 () at /usr/lib/libpthread.so.0 #1 0x00007f337acabac4 in () at /usr/lib/libQt5Script.so.5 #2 0x00007f337acabb09 in () at /usr/lib/libQt5Script.so.5 #3 0x00007f337442d454 in start_thread () at /usr/lib/libpthread.so.0 #4 0x00007f3374c337df in clone () at /usr/lib/libc.so.6 Thread 5 (Thread 0x7f335759a700 (LWP 5850)): #0 0x00007f3374c2a48d in poll () at /usr/lib/libc.so.6 #1 0x00007f336fef2786 in () at /usr/lib/libglib-2.0.so.0 #2 0x00007f336fef289c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0 #3 0x00007f337554c72b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #4 0x00007f33754f623a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #5 0x00007f33753190f3 in QThread::exec() () at /usr/lib/libQt5Core.so.5 #6 0x00007f337867c2d5 in () at /usr/lib/libQt5Qml.so.5 #7 0x00007f337531dd78 in () at /usr/lib/libQt5Core.so.5 #8 0x00007f337442d454 in start_thread () at /usr/lib/libpthread.so.0 #9 0x00007f3374c337df in clone () at /usr/lib/libc.so.6 Thread 4 (Thread 0x7f335d391700 (LWP 5736)): #0 0x00007f337b42b7ba in _dl_update_slotinfo () at /lib64/ld-linux-x86-64.so.2 #1 0x00007f337b42b82c in update_get_addr () at /lib64/ld-linux-x86-64.so.2 #2 0x00007f337531cc16 in () at /usr/lib/libQt5Core.so.5 #3 0x00007f337554be7a in () at /usr/lib/libQt5Core.so.5 #4 0x00007f336fef1c89 in g_main_context_prepare () at /usr/lib/libglib-2.0.so.0 #5 0x00007f336fef26ab in () at /usr/lib/libglib-2.0.so.0 #6 0x00007f336fef289c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0 #7 0x00007f337554c72b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #8 0x00007f33754f623a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #9 0x00007f33753190f3 in QThread::exec() () at /usr/lib/libQt5Core.so.5 #10 0x00007f337867c2d5 in () at /usr/lib/libQt5Qml.so.5 #11 0x00007f337531dd78 in () at /usr/lib/libQt5Core.so.5 #12 0x00007f337442d454 in start_thread () at /usr/lib/libpthread.so.0 #13 0x00007f3374c337df in clone () at /usr/lib/libc.so.6 Thread 3 (Thread 0x7f335edd9700 (LWP 5678)): #0 0x00007f336ff37dd4 in g_mutex_unlock () at /usr/lib/libglib-2.0.so.0 #1 0x00007f336fef1f89 in g_main_context_query () at /usr/lib/libglib-2.0.so.0 #2 0x00007f336fef26f8 in () at /usr/lib/libglib-2.0.so.0 #3 0x00007f336fef289c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0 #4 0x00007f337554c72b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #5 0x00007f33754f623a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #6 0x00007f33753190f3 in QThread::exec() () at /usr/lib/libQt5Core.so.5 #7 0x00007f3376099e55 in () at /usr/lib/libQt5DBus.so.5 #8 0x00007f337531dd78 in () at /usr/lib/libQt5Core.so.5 #9 0x00007f337442d454 in start_thread () at /usr/lib/libpthread.so.0 #10 0x00007f3374c337df in clone () at /usr/lib/libc.so.6 Thread 2 (Thread 0x7f3364a32700 (LWP 5676)): #0 0x00007f3374c2a48d in poll () at /usr/lib/libc.so.6 #1 0x00007f3379beb8e0 in () at /usr/lib/libxcb.so.1 #2 0x00007f3379bed679 in xcb_wait_for_event () at /usr/lib/libxcb.so.1 #3 0x00007f336676f449 in () at /usr/lib/libQt5XcbQpa.so.5 #4 0x00007f337531dd78 in () at /usr/lib/libQt5Core.so.5 #5 0x00007f337442d454 in start_thread () at /usr/lib/libpthread.so.0 #6 0x00007f3374c337df in clone () at /usr/lib/libc.so.6 Thread 1 (Thread 0x7f337b527800 (LWP 5664)): [KCrash Handler] #6 0x00007f3374b7e04f in raise () at /usr/lib/libc.so.6 #7 0x00007f3374b7f47a in abort () at /usr/lib/libc.so.6 #8 0x00007f33753044a1 in () at /usr/lib/libQt5Core.so.5 #9 0x00007f3377c7c0b2 in () at /usr/lib/libKF5Service.so.5 #10 0x00007f3377cb2047 in KPluginInfo::version() const () at /usr/lib/libKF5Service.so.5 #11 0x00007f33799b4e37 in () at /usr/lib/libKF5Plasma.so.5 #12 0x00007f33755239ce in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/libQt5Core.so.5 #13 0x00007f3377589445 in KDirWatch::created(QString const&) () at /usr/lib/libKF5CoreAddons.so.5 #14 0x00007f3377589fe4 in KDirWatch::setCreated(QString const&) () at /usr/lib/libKF5CoreAddons.so.5 #15 0x00007f33755244b9 in QObject::event(QEvent*) () at /usr/lib/libQt5Core.so.5 #16 0x00007f3376462e0c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5 #17 0x00007f337646a581 in QApplication::notify(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5 #18 0x00007f33754f7de0 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5 #19 0x00007f33754fa56d in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /usr/lib/libQt5Core.so.5 #20 0x00007f337554c303 in () at /usr/lib/libQt5Core.so.5 #21 0x00007f336fef2587 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0 #22 0x00007f336fef27f0 in () at /usr/lib/libglib-2.0.so.0 #23 0x00007f336fef289c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0 #24 0x00007f337554c70f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #25 0x00007f33754f623a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5 #26 0x00007f33754fe73c in QCoreApplication::exec() () at /usr/lib/libQt5Core.so.5 #27 0x000000000041c8b2 in () #28 0x00007f3374b6b291 in __libc_start_main () at /usr/lib/libc.so.6 #29 0x000000000041cc3a in _start () Reported using DrKonqi
That means we're hitting: KPLUGININFO_ISVALID_ASSERTION and we're using metadata object for an invalid metatadata. Grep shows the only direct calls to KPluginInfo::version are in ThemePrivate. We're not handling a theme being removed (even if temporarily) at runtime. It's a bug in our code, but it's pretty obscure.
either settingsFileChanged() or useCache() more debug symbols could be useful to see which it is, bu we can try to guard those two.. probably is useCache() as is called in a timer trigger (so can happen the timer is started when the theme is still there and triggered when it's already gone
(In reply to Marco Martin from comment #2) > probably is useCache() as is called in a timer trigger (so can happen the > timer is started when the theme is still there and triggered when it's > already gone hmm, actually not, in useCache we explicitly check the file exists just before. in settingsFileChanged it's using a cached themeMetadataPath that may have been deleted in the meantime
can be something as easy as that, tough what would then happen is the theme being not really functional anymore (that's why didn't do a rr yet) maybe, in the case pluginifo is not valid, useCache() can be called again, causing a reevaluation of themeMetadataPath index 0f3662e..dc50852 100644 --- a/src/plasma/private/theme_p.cpp +++ b/src/plasma/private/theme_p.cpp @@ -582,7 +582,7 @@ void ThemePrivate::settingsFileChanged(const QString &file) qCDebug(LOG_PLASMA) << "settingsFile: " << file; if (file == themeMetadataPath) { const KPluginInfo pluginInfo(themeMetadataPath); - if (themeVersion != pluginInfo.version()) { + if (pluginInfo.isValid() && themeVersion != pluginInfo.version()) { scheduleThemeChangeNotification(SvgElementsCache); } } else if (file.endsWith(QLatin1String(themeRcFile))) {
yeah, I reached the same conclusion earlier: https://git.reviewboard.kde.org/r/129436/
Git commit 760fb53e7dcc873f4ec90e726d16f766daabf99f by David Edmundson. Committed on 22/11/2016 at 10:44. Pushed by davidedmundson into branch 'master'. Check for metadata validty in settingsFileChanged settingsFileChanged is called if the plugin metadata file changes, and reloads the theme if the version changes. However, if the metadata file now doesn't exist we need to check before calling .version() otherwise it will assert. If it doesn't exist, we want to reload the theme so that it will load the correct thing. REVIEW: 129436 M +1 -1 src/plasma/private/theme_p.cpp http://commits.kde.org/plasma-framework/760fb53e7dcc873f4ec90e726d16f766daabf99f