Bug 353177 - plasma-pa crashes (and brings down plasmashell) when pulseaudio restarts
Summary: plasma-pa crashes (and brings down plasmashell) when pulseaudio restarts
Status: RESOLVED WORKSFORME
Alias: None
Product: plasma-pa
Classification: Plasma
Component: general (show other bugs)
Version: 5.14.4
Platform: Neon Linux
: NOR crash
Target Milestone: ---
Assignee: Plasma Bugs List
URL:
Keywords:
: 353599 369577 (view as bug list)
Depends on:
Blocks:
 
Reported: 2015-09-25 13:42 UTC by Felipe Sateler
Modified: 2022-09-04 10:21 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Felipe Sateler 2015-09-25 13:42:56 UTC
This is not always reproducible, but it happens sometimes. After a pulseaudio restart (socket-activated, so via systemctl --user restart pulseaudio.service), plasmashell crashes. Attached is a stack trace.

Possibly involved in the crash is the fact that I had updated pulseaudio and its libraries (which is why I was restarting pulseaudio), but plasma-pa was running from before the update.

I have seen the following reactions from plasma-pa:

1. Instant crash (the first time after the update, this one seems pulseaudio's fault).
2. Crash on clicking on it.
3. Crash on clicking on a volume slider.
4. (Most bening) moving the volume sliders does nothing

The attached stack trace is from event number 3.

If I can provide any additional information, I'm happy to do so.

Reproducible: Sometimes




Application: Plasma (plasmashell), signal: Segmentation fault
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Current thread is 1 (Thread 0x7f443b3a7940 (LWP 28325))]

Thread 6 (Thread 0x7f441fdfa700 (LWP 28332)):
#0  0x00007f4432972719 in g_mutex_lock (mutex=mutex@entry=0x7f4418000990) at /tmp/buildd/glib2.0-2.44.1/./glib/gthread-posix.c:1338
#1  0x00007f443292d2d7 in g_main_context_prepare (context=context@entry=0x7f4418000990, priority=priority@entry=0x7f441fdf9b30) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:3350
#2  0x00007f443292dde8 in g_main_context_iterate (context=context@entry=0x7f4418000990, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:3788
#3  0x00007f443292dfcc in g_main_context_iteration (context=0x7f4418000990, may_block=may_block@entry=1) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:3869
#4  0x00007f443648be4b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7f44180008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:420
#5  0x00007f44364322ca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7f441fdf9c60, flags=..., flags@entry=...) at kernel/qeventloop.cpp:204
#6  0x00007f4436250374 in QThread::exec() (this=this@entry=0x19d61f0) at thread/qthread.cpp:503
#7  0x00007f4438a5f055 in QQmlThreadPrivate::run() (this=0x19d61f0) at qml/ftw/qqmlthread.cpp:141
#8  0x00007f443625525e in QThreadPrivate::start(void*) (arg=0x19d61f0) at thread/qthread_unix.cpp:337
#9  0x00007f44353750a4 in start_thread (arg=0x7f441fdfa700) at pthread_create.c:309
#10 0x00007f4435b7506d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 5 (Thread 0x7f4416fe6700 (LWP 28336)):
#0  0x00007f4435b6c52d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007f443292debc in g_main_context_iterate (priority=2147483647, n_fds=1, fds=0x7f4410002e70, timeout=-1, context=0x7f4410000990) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:4103
#2  0x00007f443292debc in g_main_context_iterate (context=context@entry=0x7f4410000990, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:3803
#3  0x00007f443292dfcc in g_main_context_iteration (context=0x7f4410000990, may_block=may_block@entry=1) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:3869
#4  0x00007f443648be4b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7f44100008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:420
#5  0x00007f44364322ca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7f4416fe5c60, flags=..., flags@entry=...) at kernel/qeventloop.cpp:204
#6  0x00007f4436250374 in QThread::exec() (this=this@entry=0x25786d0) at thread/qthread.cpp:503
#7  0x00007f4438a5f055 in QQmlThreadPrivate::run() (this=0x25786d0) at qml/ftw/qqmlthread.cpp:141
#8  0x00007f443625525e in QThreadPrivate::start(void*) (arg=0x25786d0) at thread/qthread_unix.cpp:337
#9  0x00007f44353750a4 in start_thread (arg=0x7f4416fe6700) at pthread_create.c:309
#10 0x00007f4435b7506d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 4 (Thread 0x7f4414d88700 (LWP 28340)):
#0  0x00007f4435b6c52d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007f443292debc in g_main_context_iterate (priority=2147483647, n_fds=1, fds=0x7f440c003070, timeout=-1, context=0x7f440c000990) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:4103
#2  0x00007f443292debc in g_main_context_iterate (context=context@entry=0x7f440c000990, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:3803
#3  0x00007f443292dfcc in g_main_context_iteration (context=0x7f440c000990, may_block=may_block@entry=1) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:3869
#4  0x00007f443648be4b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7f440c0008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:420
#5  0x00007f44364322ca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7f4414d87c60, flags=..., flags@entry=...) at kernel/qeventloop.cpp:204
#6  0x00007f4436250374 in QThread::exec() (this=this@entry=0x26c0310) at thread/qthread.cpp:503
#7  0x00007f4438a5f055 in QQmlThreadPrivate::run() (this=0x26c0310) at qml/ftw/qqmlthread.cpp:141
#8  0x00007f443625525e in QThreadPrivate::start(void*) (arg=0x26c0310) at thread/qthread_unix.cpp:337
#9  0x00007f44353750a4 in start_thread (arg=0x7f4414d88700) at pthread_create.c:309
#10 0x00007f4435b7506d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 3 (Thread 0x7f44073d8700 (LWP 28341)):
#0  0x00007f443537908f in pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007f443ae06144 in  () at /usr/lib/x86_64-linux-gnu/libQt5Script.so.5
#2  0x00007f443ae06189 in  () at /usr/lib/x86_64-linux-gnu/libQt5Script.so.5
#3  0x00007f44353750a4 in start_thread (arg=0x7f44073d8700) at pthread_create.c:309
#4  0x00007f4435b7506d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 2 (Thread 0x7f4384a63700 (LWP 28342)):
#0  0x00007f4432972719 in g_mutex_lock (mutex=mutex@entry=0x7f4380000990) at /tmp/buildd/glib2.0-2.44.1/./glib/gthread-posix.c:1338
#1  0x00007f443292d409 in g_main_context_prepare (context=context@entry=0x7f4380000990, priority=priority@entry=0x7f4384a62ae0) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:3412
#2  0x00007f443292dde8 in g_main_context_iterate (context=context@entry=0x7f4380000990, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:3788
#3  0x00007f443292dfcc in g_main_context_iteration (context=0x7f4380000990, may_block=may_block@entry=1) at /tmp/buildd/glib2.0-2.44.1/./glib/gmain.c:3869
#4  0x00007f443648be4b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7f43800008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:420
#5  0x00007f44364322ca in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7f4384a62c10, flags=..., flags@entry=...) at kernel/qeventloop.cpp:204
#6  0x00007f4436250374 in QThread::exec() (this=this@entry=0x296bec0) at thread/qthread.cpp:503
#7  0x00007f44393dcc26 in QQuickPixmapReader::run() (this=0x296bec0) at util/qquickpixmapcache.cpp:714
#8  0x00007f443625525e in QThreadPrivate::start(void*) (arg=0x296bec0) at thread/qthread_unix.cpp:337
#9  0x00007f44353750a4 in start_thread (arg=0x7f4384a63700) at pthread_create.c:309
#10 0x00007f4435b7506d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 1 (Thread 0x7f443b3a7940 (LWP 28325)):
[KCrash Handler]
#6  0x00007f437b40ca0e in QPulseAudio::SinkModel::setData(QModelIndex const&, QVariant const&, int) (this=this@entry=0x433a560, index=..., value=..., role=role@entry=262) at ../../src/pulseaudio.cpp:157
#7  0x00007f443884579e in QQmlDMCachedModelData::metaCall(QMetaObject::Call, int, void**) (value=..., role=262, this=0x600d5d0) at util/qqmladaptormodel.cpp:417
#8  0x00007f443884579e in QQmlDMCachedModelData::metaCall(QMetaObject::Call, int, void**) (this=0x600d5d0, call=<optimized out>, id=<optimized out>, arguments=<optimized out>) at util/qqmladaptormodel.cpp:299
#9  0x00007f44389db641 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlContextData*, QFlags<QQmlPropertyPrivate::WriteFlag>) (object=object@entry=0x600d5d0, property=..., value=..., context=0x58f2060, flags=...) at qml/qqmlproperty.cpp:1314
#10 0x00007f44389ac808 in QV4::QObjectWrapper::setProperty(QObject*, QV4::ExecutionContext*, QQmlPropertyData*, QV4::ValueRef) (object=object@entry=0x600d5d0, ctx=ctx@entry=0x7ffc4bb75ec0, property=0x5f528a8, value=..., value@entry=...) at jsruntime/qv4qobjectwrapper.cpp:550
#11 0x00007f44389acddb in QV4::QObjectWrapper::setQmlProperty(QV4::ExecutionContext*, QQmlContextData*, QObject*, QV4::String*, QV4::QObjectWrapper::RevisionMode, QV4::ValueRef) (ctx=0x7ffc4bb75ec0, qmlContext=qmlContext@entry=0x4b98ec0, object=0x600d5d0, name=name@entry=0x7f4375dc5000, revisionMode=revisionMode@entry=QV4::QObjectWrapper::CheckRevision, value=..., value@entry=...) at jsruntime/qv4qobjectwrapper.cpp:437
#12 0x00007f4438a51534 in QV4::QmlContextWrapper::put(QV4::Managed*, QV4::String*, QV4::ValueRef) (m=0x7f436de4e3e0, name=0x7f4375dc5000, value=...) at qml/qqmlcontextwrapper.cpp:327
#13 0x00007f443893d989 in QV4::ExecutionContext::setProperty(QV4::String*, QV4::ValueRef) (v=..., name=0x7f4375dc5000, this=<optimized out>) at jsruntime/qv4object_p.h:256
#14 0x00007f443893d989 in QV4::ExecutionContext::setProperty(QV4::String*, QV4::ValueRef) (this=0x7ffc4bb75ec0, name=0x7f4375dc5000, value=...) at jsruntime/qv4context.cpp:333
#15 0x00007f437b637649 in  ()
#16 0x3ff0000000000000 in  ()
#17 0x0003000000000000 in  ()
#18 0x00000000058f2060 in  ()
#19 0x00000000026b2860 in  ()
#20 0x00007ffc4bb75f30 in  ()
#21 0x00000000026b21e0 in  ()
#22 0x00000000026c7870 in  ()
#23 0x00007f4375dc44c0 in  ()
#24 0x00007ffc4bb760c0 in  ()
#25 0x00007f4438969786 in QV4::SimpleScriptFunction::call(QV4::Managed*, QV4::CallData*) (that=0x7f44078003c0, callData=<optimized out>) at jsruntime/qv4functionobject.cpp:511
#26 0x00007f44389b648e in QV4::Runtime::callActivationProperty(QV4::ExecutionContext*, QV4::String*, QV4::CallData*) (d=0x7f4407800318, this=<optimized out>) at jsruntime/qv4object_p.h:278
#27 0x00007f44389b648e in QV4::Runtime::callActivationProperty(QV4::ExecutionContext*, QV4::String*, QV4::CallData*) (context=0x7ffc4bb760c0, name=0x7f4375dc54e0, callData=0x7f4407800318) at jsruntime/qv4runtime.cpp:908
#28 0x00007f437b6332b4 in  ()
#29 0x00007f4407800100 in  ()
#30 0x20ce6505fc997a00 in  ()
#31 0x00007ffc4bb76480 in  ()
#32 0x0000000004f30de0 in  ()
#33 0x00007f4407800120 in  ()
#34 0x00007f4407800110 in  ()
#35 0x00000000026c7870 in  ()
#36 0x00007f4375dc11f0 in  ()
#37 0x00007ffc4bb76b50 in  ()
#38 0x00007f4438969786 in QV4::SimpleScriptFunction::call(QV4::Managed*, QV4::CallData*) (that=0x7f4407800358, callData=<optimized out>) at jsruntime/qv4functionobject.cpp:511
#39 0x00007f4438a45d68 in QQmlJavaScriptExpression::evaluate(QQmlContextData*, QV4::ValueRef, QV4::CallData*, bool*) (d=0x7f4438a45d68 <QQmlJavaScriptExpression::evaluate(QQmlContextData*, QV4::ValueRef, QV4::CallData*, bool*)+648>, this=<optimized out>) at ../../include/QtQml/5.4.2/QtQml/private/../../../../../src/qml/jsruntime/qv4object_p.h:278
#40 0x00007f4438a45d68 in QQmlJavaScriptExpression::evaluate(QQmlContextData*, QV4::ValueRef, QV4::CallData*, bool*) (this=this@entry=0x4df8d30, context=<optimized out>, function=function@entry=..., callData=callData@entry=0x7f44078002b0, isUndefined=isUndefined@entry=0x0) at qml/qqmljavascriptexpression.cpp:158
#41 0x00007f44389ea8a6 in QQmlBoundSignalExpression::evaluate(void**) (this=<optimized out>, a=a@entry=0x0) at qml/qqmlboundsignal.cpp:281
#42 0x00007f44389eb0eb in QQmlBoundSignal_callback(QQmlNotifierEndpoint*, void**) (e=0x59cbaf8, a=0x0) at qml/qqmlboundsignal.cpp:408
#43 0x00007f4438a295d7 in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) (endpoint=0x59cbaf8, a=a@entry=0x0) at qml/qqmlnotifier.cpp:73
#44 0x00007f4438a2959e in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) (endpoint=0x4ea7420, a=a@entry=0x0) at qml/qqmlnotifier.cpp:68
#45 0x00007f4438a2959e in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) (endpoint=0x4ea76f8, a=a@entry=0x0) at qml/qqmlnotifier.cpp:68
#46 0x00007f4438a2959e in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) (endpoint=0x594d7d8, a=a@entry=0x0) at qml/qqmlnotifier.cpp:68
#47 0x00007f44389c91cc in QQmlData::signalEmitted(QAbstractDeclarativeData*, QObject*, int, void**) (object=0x58c81e0, index=45, a=0x0) at qml/qqmlengine.cpp:717
#48 0x00007f4436464c00 in QMetaObject::activate(QObject*, int, int, void**) (sender=0x58c81e0, signalOffset=<optimized out>, local_signal_index=<optimized out>, argv=0x0) at kernel/qobject.cpp:3603
#49 0x00007f4438a295d7 in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) (endpoint=0x4addf30, a=a@entry=0x7ffc4bb768b0) at qml/qqmlnotifier.cpp:73
#50 0x00007f44389c91cc in QQmlData::signalEmitted(QAbstractDeclarativeData*, QObject*, int, void**) (object=0x583ec60, index=3, a=0x7ffc4bb768b0) at qml/qqmlengine.cpp:717
#51 0x00007f4436464c00 in QMetaObject::activate(QObject*, int, int, void**) (sender=0x583ec60, signalOffset=<optimized out>, local_signal_index=<optimized out>, argv=0x7ffc4bb768b0) at kernel/qobject.cpp:3603
#52 0x00007f441dbbd700 in  () at /usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/libqtquickcontrolsplugin.so
#53 0x00007f441dbab18b in  () at /usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/libqtquickcontrolsplugin.so
#54 0x00007f441dbbe052 in  () at /usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/libqtquickcontrolsplugin.so
#55 0x00007f44389ac12d in QV4::QObjectWrapper::setProperty(QObject*, QV4::ExecutionContext*, QQmlPropertyData*, QV4::ValueRef) (object=0x583ec60, ctx=<optimized out>, property=0x7f440c260b68, value=...) at jsruntime/qv4qobjectwrapper.cpp:498
#56 0x00007f44389ad128 in QV4::QObjectWrapper::setProperty(QV4::ExecutionContext*, int, QV4::ValueRef) (this=<optimized out>, ctx=<optimized out>, propertyIndex=<optimized out>, value=...) at jsruntime/qv4qobjectwrapper.cpp:648
#57 0x00007f44389b842e in QV4::Runtime::setQmlQObjectProperty(QV4::ExecutionContext*, QV4::ValueRef, int, QV4::ValueRef) (ctx=<optimized out>, object=..., propertyIndex=<optimized out>, value=...) at jsruntime/qv4runtime.cpp:1344
#58 0x00007f437b64fc9e in  ()
#59 0x00007f4407800230 in  ()
#60 0x00007f4438a52171 in QV4::QmlContextWrapper::get(QV4::Managed*, QV4::String*, bool*) (m=<optimized out>, name=0x7f4407800298, hasProperty=0x7ffc4bb76bc0) at qml/qqmlcontextwrapper.cpp:243
#61 0x00007ffc4bb76d50 in  ()
#62 0x00007f4375ce1960 in  ()
#63 0x0000000000000000 in  ()
Comment 1 David Edmundson 2015-10-06 16:04:27 UTC
*** Bug 353599 has been marked as a duplicate of this bug. ***
Comment 2 . 2016-02-06 00:33:38 UTC
I'm experiencing exactly the same issue. I'm using version 5.5.4.
Comment 3 David Edmundson 2016-10-03 15:27:22 UTC
*** Bug 369577 has been marked as a duplicate of this bug. ***
Comment 4 Andrew Crouthamel 2018-11-01 13:56:03 UTC
Dear Bug Submitter,

This bug has been stagnant for a long time. Could you help us out and re-test if the bug is valid in the latest version? I am setting the status to NEEDSINFO pending your response, please change the Status back to REPORTED when you respond.

Thank you for helping us make KDE software even better for everyone!
Comment 5 Bug Janitor Service 2018-11-16 11:35:11 UTC
Dear Bug Submitter,

This bug has been in NEEDSINFO status with no change for at least
15 days. Please provide the requested information as soon as
possible and set the bug status as REPORTED. Due to regular bug
tracker maintenance, if the bug is still in NEEDSINFO status with
no change in 30 days the bug will be closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

If you have already provided the requested information, please
mark the bug as REPORTED so that the KDE team knows that the bug is
ready to be confirmed.

Thank you for helping us make KDE software even better for everyone!
Comment 6 Felipe Sateler 2018-11-16 12:10:25 UTC
I'm no longer using KDE so I can't further debug this.
Comment 7 Lemmiwinks 2019-01-18 17:02:13 UTC
Plasmashell always crashes when I kill pulseaudio.
Only seems to happen in KDE Neon but not with Kubuntu 18.04.


Operating System: KDE neon 5.14
KDE Plasma Version: 5.14.4
Qt Version: 5.11.2
KDE Frameworks Version: 5.53.0
Kernel Version: 4.15.0-43-generic
OS Type: 64-bit
Processors: 4 × Intel® Core™ i7-4600U CPU @ 2.10GHz
Memory: 15,1 GiB of RAM
Comment 8 Justin Zobel 2021-06-20 08:37:28 UTC
(In reply to Lemmiwinks from comment #7)
> Plasmashell always crashes when I kill pulseaudio.
> Only seems to happen in KDE Neon but not with Kubuntu 18.04.
> 
> 
> Operating System: KDE neon 5.14
> KDE Plasma Version: 5.14.4
> Qt Version: 5.11.2
> KDE Frameworks Version: 5.53.0
> Kernel Version: 4.15.0-43-generic
> OS Type: 64-bit
> Processors: 4 × Intel® Core™ i7-4600U CPU @ 2.10GHz
> Memory: 15,1 GiB of RAM

As this crash is quite old now, can you please confirm if this crash still occurs on a current version?

This bug has been set to "NEEDSINFO/WAITINGFORINFO", if you are able to update the bug report please mark it as reported when you add the new information, thank you.
Comment 9 Bug Janitor Service 2021-07-05 04:33:46 UTC
Dear Bug Submitter,

This bug has been in NEEDSINFO status with no change for at least
15 days. Please provide the requested information as soon as
possible and set the bug status as REPORTED. Due to regular bug
tracker maintenance, if the bug is still in NEEDSINFO status with
no change in 30 days the bug will be closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

If you have already provided the requested information, please
mark the bug as REPORTED so that the KDE team knows that the bug is
ready to be confirmed.

Thank you for helping us make KDE software even better for everyone!
Comment 10 Bug Janitor Service 2021-07-20 04:33:37 UTC
This bug has been in NEEDSINFO status with no change for at least
30 days. The bug is now closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

Thank you for helping us make KDE software even better for everyone!