Bug 495114 - Crash when changing Plasma theme
Summary: Crash when changing Plasma theme
Status: RESOLVED FIXED
Alias: None
Product: frameworks-ksvg
Classification: Frameworks and Libraries
Component: General (show other bugs)
Version: unspecified
Platform: Other Linux
: NOR crash
Target Milestone: ---
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-10-20 21:40 UTC by Nicolas Fella
Modified: 2024-12-08 22:39 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Nicolas Fella 2024-10-20 21:40:53 UTC
STEPS TO REPRODUCE
1. Run in qmlscene:

import QtQuick
import org.kde.ksvg as KSvg
//NOTE: importing PlasmaCore is necessary in order to make KSvg load the current Plasma Theme
import org.kde.plasma.core as PlasmaCore

Item {
    id: root

    KSvg.Svg {
        id: radioButtonSvg
        imagePath: "widgets/radiobutton"
    }

    Loader {
        anchors.fill: parent
        sourceComponent: radioButtonSvg.fromCurrentImageSet
            ? radiobuttonComponent : compatibilityComponent
    }

    Component {
        id: radiobuttonComponent
        KSvg.SvgItem {
            svg: radioButtonSvg
            elementId: "normal"
            KSvg.SvgItem {
                svg: radioButtonSvg
                elementId: "shadow"
            }
        }
    }

    Component {
        id: compatibilityComponent

        Item {}
    }
}
 
2. Go to systemsettings > Plasma Style
3. Change from Breeze to e.g. ArcDusk-dark (from the store)

OBSERVED RESULT

#0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1  0x00007fffef09a2e3 in __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:78
#2  0x00007fffef0414b6 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3  0x00007fffef02891a in __GI_abort () at abort.c:79
#4  0x00007fffef9aca94 in qAbort () at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qassert.cpp:46
#5  0x00007fffefa04866 in qt_message_fatal<QString&> (context=..., message=...) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlogging.cpp:2116
#6  0x00007fffefa05c63 in qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *)
    (msgType=msgType@entry=QtFatalMsg, context=..., msg=msg@entry=0x7ffff04e8440 "ASSERT failure in %s: \"%s\", file %s, line %d", ap=ap@entry=0x7fffebb35c20) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlogging.cpp:382
#7  0x00007fffefa1447f in QMessageLogger::fatal (this=this@entry=0x7fffeb96fa20, msg=msg@entry=0x7ffff04e8440 "ASSERT failure in %s: \"%s\", file %s, line %d") at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlogging.cpp:884
#8  0x00007fffef9acd73 in qt_assert_x (where=<optimized out>, what=0x7fffd598ec00 "Called object is not of the correct type (class destructor may have already run)", file=0x7fffd598eba0 "/home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h", line=105)
    at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qassert.cpp:114
#9  0x00007fffd59528e8 in QtPrivate::assertObjectType<KSvg::SvgItem> (o=0x5120000acfc0) at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:105
#10 0x00007fffd59526e6 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (KSvg::SvgItem::*)()>::call(void (KSvg::SvgItem::*)(), KSvg::SvgItem*, void**)
    (f=(void (KSvg::SvgItem::*)(class KSvg::SvgItem * const)) 0x7fffd594b92e <KSvg::SvgItem::updateNeeded()>, o=0x5120000acfc0, arg=0x7fffebb35720) at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:125
#11 0x00007fffd59524a8 in QtPrivate::FunctionPointer<void (KSvg::SvgItem::*)()>::call<QtPrivate::List<>, void>(void (KSvg::SvgItem::*)(), KSvg::SvgItem*, void**)
    (f=(void (KSvg::SvgItem::*)(class KSvg::SvgItem * const)) 0x7fffd594b92e <KSvg::SvgItem::updateNeeded()>, o=0x5120000acfc0, arg=0x7fffebb35720) at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:174
#12 0x00007fffd5952268 in QtPrivate::QCallableObject<void (KSvg::SvgItem::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x503000120700, r=0x5120000acfc0, a=0x7fffebb35720, ret=0x0)
    at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:545
#13 0x00007fffefcbe8dc in QtPrivate::QSlotObjectBase::call (this=<optimized out>, r=0x5120000acfc0, a=0x7fffebb35720) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
#14 doActivate<false> (sender=sender@entry=0x51100011ea80, signal_index=<optimized out>, argv=<optimized out>, argv@entry=0x0) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qobject.cpp:4127
#15 0x00007fffefc9d68c in QMetaObject::activate (sender=0x51100011ea80, m=<optimized out>, local_signal_index=0, argv=0x0) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qobject.cpp:4187
#16 0x00007fffd4318ea7 in KSvg::Svg::repaintNeeded (this=0x51100011ea80) at /home/nico/kde-qtdev/build/ksvg/src/ksvg/KF6Svg_autogen/include/moc_svg.cpp:823
#17 0x00007fffd4315d03 in KSvg::Svg::clearColorOverrides (this=0x51100011ea80) at /home/nico/kde-qtdev/src/ksvg/src/ksvg/svg.cpp:1153
#18 0x00007fffd5949156 in operator() (__closure=0x503000122900) at /home/nico/kde-qtdev/src/ksvg/src/declarativeimports/svgitem.cpp:60
#19 0x00007fffd594deac in operator() (__closure=0x7fffeb96f340) at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:116
#20 0x00007fffd594e1c7 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<long unsigned int>, QtPrivate::List<>, void, KSvg::SvgItem::componentComplete()::<lambda()> >::call(KSvg::SvgItem::componentComplete()::<lambda()>&, void**)::<lambda()> >(void **, struct {...} &&) (args=0x7fffebb35320, fn=...) at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:65
#21 0x00007fffd594dfb2 in QtPrivate::FunctorCall<std::integer_sequence<long unsigned int>, QtPrivate::List<>, void, KSvg::SvgItem::componentComplete()::<lambda()> >::call(struct {...} &, void **) (f=..., arg=Python Exception <class 'gdb.MemoryError'>: Cannot access memory at address 0xffffffffffffffc0

   #22 0x00007fffd594de35 in QtPrivate::FunctorCallable<KSvg::SvgItem::componentComplete()::<lambda()> >::call<QtPrivate::List<>, void>(struct {...} &, void *, void **) (f=..., arg=0x7fffebb35320)
    at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:337
#23 0x00007fffd594dd57 in QtPrivate::QCallableObject<KSvg::SvgItem::componentComplete()::<lambda()>, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *)
    (which=1, this_=0x5030001228f0, r=0x5120000ad140, a=0x7fffebb35320, ret=0x0) at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:547
#24 0x00007fffefcbe8dc in QtPrivate::QSlotObjectBase::call (this=<optimized out>, r=0x5120000ad140, a=0x7fffebb35320) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
#25 doActivate<false> (sender=sender@entry=0x50400012a850, signal_index=<optimized out>, argv=<optimized out>, argv@entry=0x0) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qobject.cpp:4127
#26 0x00007fffefc9d68c in QMetaObject::activate (sender=0x50400012a850, m=<optimized out>, local_signal_index=0, argv=0x0) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qobject.cpp:4187
#27 0x00007fffe12c704f in Kirigami::Platform::PlatformTheme::colorsChanged (this=0x50400012a850) at /home/nico/kde-qtdev/build/kirigami/src/platform/KirigamiPlatform_autogen/include/moc_platformtheme.cpp:675
#28 0x00007fffe12c149c in Kirigami::Platform::PlatformTheme::emitSignalsForChanges (this=0x50400012a850, changes=63) at /home/nico/kde-qtdev/src/kirigami/src/platform/platformtheme.cpp:892
#29 0x00007fffe12c34b9 in Kirigami::Platform::PlatformThemeChangeTracker::~PlatformThemeChangeTracker (this=0x7fffebae0fa0, __in_chrg=<optimized out>) at /home/nico/kde-qtdev/src/kirigami/src/platform/platformtheme.cpp:1070
#30 0x00007fffe12c1d0a in Kirigami::Platform::PlatformTheme::event (this=0x50400012a850, event=0x7fffebb343a0) at /home/nico/kde-qtdev/src/kirigami/src/platform/platformtheme.cpp:954
#31 0x00007fffce7ba45a in PlasmaDesktopTheme::event (this=0x50400012a850, event=0x7fffebb343a0) at /home/nico/kde-qtdev/src/qqc2-desktop-style/kirigami-plasmadesktop-integration/plasmadesktoptheme.cpp:336
#32 0x00007ffff627aaae in QApplicationPrivate::notify_helper (this=this@entry=0x515000002380, receiver=receiver@entry=0x50400012a850, e=e@entry=0x7fffebb343a0) at /home/nico/workspace/qt6-dev/qtbase/src/widgets/kernel/qapplication.cpp:3294
#33 0x00007ffff6296959 in QApplication::notify (this=0x502000001590, receiver=<optimized out>, e=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/widgets/kernel/qapplication.cpp:3245
#34 0x00007fffefba3a0a in QCoreApplication::notifyInternal2 (receiver=0x50400012a850, event=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qcoreapplication.cpp:1124
#35 0x00007fffefba3b7d in QCoreApplication::sendEvent (receiver=<optimized out>, event=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qcoreapplication.cpp:1568
#36 0x00007fffe12c2b7d in Kirigami::Platform::PlatformTheme::update (this=0x50400012a850) at /home/nico/kde-qtdev/src/kirigami/src/platform/platformtheme.cpp:1011
#37 0x00007fffe12e3257 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (Kirigami::Platform::PlatformTheme::*)()>::call(void (Kirigami::Platform::PlatformTheme::*)(), Kirigami::Platform::PlatformTheme*, void**)::{lambda()#1}::operator()() const (__closure=0x7fffebae0c80) at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:127
#38 0x00007fffe12e520d in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (Kirigami::Platform::PlatformTheme::*)()>::call(void (Kirigami::Platform::PlatformTheme::*)(), Kirigami::Platform::PlatformTheme*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (Kirigami::Platform::PlatformTheme::*)()>::call(void (Kirigami::Platform::PlatformTheme::*)(), Kirigami::Platform::PlatformTheme*, void**)::{lambda()#1}&&) (args=0x7fffeb96dd40, fn=...) at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:65
#39 0x00007fffe12e340f in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (Kirigami::Platform::PlatformTheme::*)()>::call(void (Kirigami::Platform::PlatformTheme::*)(), Kirigami::Platform::PlatformTheme*, void**)
    (f=(void (Kirigami::Platform::PlatformTheme::*)(class Kirigami::Platform::PlatformTheme * const)) 0x7fffe12c1d70 <Kirigami::Platform::PlatformTheme::update()>, o=0x50400012a850, arg=0x7fffeb96dd40) at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:126
#40 0x00007fffe12dfdfc in QtPrivate::FunctionPointer<void (Kirigami::Platform::PlatformTheme::*)()>::call<QtPrivate::List<>, void>(void (Kirigami::Platform::PlatformTheme::*)(), Kirigami::Platform::PlatformTheme*, void**)
    (f=(void (Kirigami::Platform::PlatformTheme::*)(class Kirigami::Platform::PlatformTheme * const)) 0x7fffe12c1d70 <Kirigami::Platform::PlatformTheme::update()>, o=0x50400012a850, arg=0x7fffeb96dd40) at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:174
#41 0x00007fffe12dc31a in QtPrivate::QCallableObject<void (Kirigami::Platform::PlatformTheme::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x5030001209a0, r=0x50400012a850, a=0x7fffeb96dd40, ret=0x0)
    at /home/nico/kde-qtdev/usr/include/QtCore/qobjectdefs_impl.h:545
#42 0x00007fffefcbe8dc in QtPrivate::QSlotObjectBase::call (this=<optimized out>, r=0x50400012a850, a=0x7fffeb96dd40) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
#43 doActivate<false> (sender=sender@entry=0x5120000ad140, signal_index=<optimized out>, argv=<optimized out>, argv@entry=0x7fffeb96dd40) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qobject.cpp:4127
#44 0x00007fffefc9d68c in QMetaObject::activate (sender=sender@entry=0x5120000ad140, m=m@entry=0x7ffff5d872e0 <QQuickItem::staticMetaObject>, local_signal_index=local_signal_index@entry=7, argv=argv@entry=0x7fffeb96dd40)
    at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qobject.cpp:4187
#45 0x00007ffff4dab6cd in QQuickItem::parentChanged (this=this@entry=0x5120000ad140, _t1=0x0) at /home/nico/workspace/qt6-dev/qtdeclarative/src/quick/Quick_autogen/include/moc_qquickitem.cpp:1741
#46 0x00007ffff4df1567 in QQuickItem::setParentItem (this=0x5120000ad140, parentItem=parentItem@entry=0x0) at /home/nico/workspace/qt6-dev/qtdeclarative/src/quick/items/qquickitem.cpp:2868
#47 0x00007ffff4df1a99 in QQuickItem::~QQuickItem (this=0x5120000acfc0, __in_chrg=<optimized out>) at /home/nico/workspace/qt6-dev/qtdeclarative/src/quick/items/qquickitem.cpp:2390
--Type <RET> for more, q to quit, c to continue without paging--c
#48 0x00007fffd5948bc5 in KSvg::SvgItem::~SvgItem (this=0x5120000acfc0, __in_chrg=<optimized out>) at /home/nico/kde-qtdev/src/ksvg/src/declarativeimports/svgitem.cpp:40
#49 0x00007fffd5947e13 in QQmlPrivate::QQmlElement<KSvg::SvgItem>::~QQmlElement (this=0x5120000acfc0, __in_chrg=<optimized out>) at /home/nico/kde-qtdev/usr/include/QtQml/qqmlprivate.h:104
#50 0x00007fffd5947e38 in QQmlPrivate::QQmlElement<KSvg::SvgItem>::~QQmlElement (this=0x5120000acfc0, __in_chrg=<optimized out>) at /home/nico/kde-qtdev/usr/include/QtQml/qqmlprivate.h:104
#51 0x00007fffefca31f1 in QObject::event (this=this@entry=0x5120000acfc0, e=e@entry=0x503000156430) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qobject.cpp:1405
#52 0x00007ffff4e053a4 in QQuickItem::event (this=0x5120000acfc0, ev=0x503000156430) at /home/nico/workspace/qt6-dev/qtdeclarative/src/quick/items/qquickitem.cpp:9163
#53 0x00007ffff627aaae in QApplicationPrivate::notify_helper (this=this@entry=0x515000002380, receiver=receiver@entry=0x5120000acfc0, e=e@entry=0x503000156430) at /home/nico/workspace/qt6-dev/qtbase/src/widgets/kernel/qapplication.cpp:3294
#54 0x00007ffff6296959 in QApplication::notify (this=0x502000001590, receiver=<optimized out>, e=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/widgets/kernel/qapplication.cpp:3245
#55 0x00007fffefba3a0a in QCoreApplication::notifyInternal2 (receiver=0x5120000acfc0, event=event@entry=0x503000156430) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qcoreapplication.cpp:1124
#56 0x00007fffefba3b7d in QCoreApplication::sendEvent (receiver=receiver@entry=0x5120000acfc0, event=event@entry=0x503000156430) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qcoreapplication.cpp:1568
#57 0x00007fffefba6bf7 in QCoreApplicationPrivate::sendPostedEvents (receiver=receiver@entry=0x0, event_type=event_type@entry=0, data=0x50e000000900) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qcoreapplication.cpp:1923
#58 0x00007fffefba7315 in QCoreApplication::sendPostedEvents (receiver=receiver@entry=0x0, event_type=event_type@entry=0) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qcoreapplication.cpp:1755
#59 0x00007ffff04074fa in postEventSourceDispatch (s=0x50b00003f020) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:246
#60 0x00007ffff2510eb8 in g_main_dispatch (context=0x5110000101c0) at ../glib/gmain.c:3357
#61 g_main_context_dispatch_unlocked (context=context@entry=0x5110000101c0) at ../glib/gmain.c:4208
#62 0x00007ffff2512ca8 in g_main_context_iterate_unlocked (context=context@entry=0x5110000101c0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4273
#63 0x00007ffff25134bc in g_main_context_iteration (context=0x5110000101c0, may_block=1) at ../glib/gmain.c:4338
#64 0x00007ffff04057b7 in QEventDispatcherGlib::processEvents (this=<optimized out>, flags=...) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:399
#65 0x00007ffff1d81a5c in QPAEventDispatcherGlib::processEvents (this=<optimized out>, flags=...) at /home/nico/workspace/qt6-dev/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:89
#66 0x00007fffefbc4fc2 in QEventLoop::processEvents (this=this@entry=0x7fffeba8d940, flags=...) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qeventloop.cpp:103
#67 0x00007fffefbc7209 in QEventLoop::exec (this=this@entry=0x7fffeba8d940, flags=...) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qeventloop.cpp:194
#68 0x00007fffefbae892 in QCoreApplication::exec () at /home/nico/workspace/qt6-dev/qtbase/src/corelib/kernel/qcoreapplication.cpp:1469
#69 0x00007ffff0e26686 in QGuiApplication::exec () at /home/nico/workspace/qt6-dev/qtbase/src/gui/kernel/qguiapplication.cpp:1975
#70 0x0000555555567bf6 in main (argc=<optimized out>, argv=<optimized out>) at /home/nico/workspace/qt6-dev/qtdeclarative/tools/qmlscene/main.cpp:639

SOFTWARE/OS VERSIONS
KDE Plasma Version: master
KDE Frameworks Version: master
Qt Version: dev

ADDITIONAL INFORMATION
Comment 1 Christoph Cullmann 2024-12-08 22:39:32 UTC
Git commit 6664daab1d3d980b4cb8ab427eb18fb70c9dfd4c by Christoph Cullmann, on behalf of Marco Martin.
Committed on 08/12/2024 at 22:39.
Pushed by cullmann into branch 'master'.

Disconnect signals on destruction

Make sure to not call anything on m_svg when this is shutting down
Kirigami::PlatformTheme will lose its window at that point so will
emit colorschanged, which we shouldn't react to during destructor.

This fixes an assert
Related: bug 493921

M  +4    -0    src/declarativeimports/svgitem.cpp

https://invent.kde.org/frameworks/ksvg/-/commit/6664daab1d3d980b4cb8ab427eb18fb70c9dfd4c