SUMMARY Sometimes audio notification (pipewire) freezes whole shell. Basically it looks like `plasmashell` gets stuck waiting forever on Pipewire. STEPS TO REPRODUCE 1. No idea, it happens rarely OBSERVED RESULT Whole plasmashell gets stuck/frozen - "nothing works" EXPECTED RESULT Keep responding :) I think it should just timeout and abort if some time has passed. SOFTWARE/OS VERSIONS Linux: Arch Linux KDE Plasma Version: 6.5.0 KDE Frameworks Version: 6.19.0 Qt Version: 6.10.0 Pipewire: 1.4.9 ADDITIONAL INFORMATION This is backtrace when it was frozen: ``` #0 __syscall_cancel_arch () at ../sysdeps/unix/sysv/linux/x86_64/syscall_cancel.S:56 #1 0x00007fb6de0931ac in __internal_syscall_cancel (a1=<optimized out>, a2=<optimized out>, a3=<optimized out>, a4=<optimized out>, a5=a5@entry=0, a6=a6@entry=4294967295, nr=202) at cancellation.c:49 #2 0x00007fb6de09381c in __futex_abstimed_wait_common64 (private=0, futex_word=0x55d5f2507590, expected=<optimized out>, op=<optimized out>, abstime=0x0, cancel=true) at futex-internal.c:57 #3 __futex_abstimed_wait_common (futex_word=futex_word@entry=0x55d5f2507590, expected=<optimized out>, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0, cancel=cancel@entry=true) at futex-internal.c:87 #4 0x00007fb6de09387f in __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x55d5f2507590, expected=<optimized out>, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0) at futex-internal.c:139 #5 0x00007fb6de095ede in __pthread_cond_wait_common (cond=0x55d5f2507570, mutex=0x55d5f2507548, clockid=0, abstime=0x0) at pthread_cond_wait.c:421 #6 ___pthread_cond_wait (cond=cond@entry=0x55d5f2507570, mutex=mutex@entry=0x55d5f2507548) at pthread_cond_wait.c:453 #7 0x00007fb6701de1fb in pw_thread_loop_wait (loop=0x55d5f2507530) at ../pipewire/src/pipewire/thread-loop.c:428 #8 0x00007fb661b5dc85 in snd_pcm_pipewire_prepare (io=0x55d5f1bf1480) at ../pipewire/pipewire-alsa/alsa-plugins/pcm_pipewire.c:585 #9 0x00007fb640147873 in snd_pcm_ioplug_prepare (pcm=0x55d5f26335f0) at pcm/pcm_ioplug.c:175 #10 0x00007fb6401851d1 in snd_pcm_prepare (pcm=0x55d5f26335f0) at pcm/pcm.c:1249 #11 0x00007fb6401a61f7 in snd_pcm_hw_params (pcm=<optimized out>, params=params@entry=0x7ffe527ac900) at pcm/pcm.c:958 #12 0x00007fb67a365401 in open_alsa (c=c@entry=0x55d5f04f75d0, out=out@entry=0x55d5f6592540) at /usr/src/debug/libcanberra/libcanberra/src/alsa.c:261 #13 0x00007fb67a366111 in alsa_driver_play (c=0x55d5f04f75d0, id=0, proplist=0x55d5f57f23b0, cb=0x0, userdata=<optimized out>) at /usr/src/debug/libcanberra/libcanberra/src/alsa.c:459 #14 0x00007fb6dcf8c308 in driver_play (c=0x55d5f04f75d0, id=0, pl=0x55d5f57f23b0, cb=0x0, userdata=0x0) at /usr/src/debug/libcanberra/libcanberra/src/dso.c:342 #15 ca_context_play_full (c=0x55d5f04f75d0, id=id@entry=0, p=p@entry=0x55d5f57f23b0, cb=cb@entry=0x0, userdata=userdata@entry=0x0) at /usr/src/debug/libcanberra/libcanberra/src/common.c:522 #16 0x00007fb67a36ba66 in multi_driver_play (c=<optimized out>, id=0, proplist=0x55d5f57f23b0, cb=<optimized out>, userdata=<optimized out>) at /usr/src/debug/libcanberra/libcanberra/src/multi.c:273 #17 0x00007fb6dcf8c308 in driver_play (c=0x55d5f02034d0, id=0, pl=0x55d5f57f23b0, cb=0x0, userdata=0x0) at /usr/src/debug/libcanberra/libcanberra/src/dso.c:342 #18 ca_context_play_full (c=0x55d5f02034d0, id=0, p=0x55d5f57f23b0, cb=0x0, userdata=0x0) at /usr/src/debug/libcanberra/libcanberra/src/common.c:522 #19 0x00007fb6707043eb in NotificationManager::Notifications::playSoundHint(QModelIndex const&) const () from /usr/lib/libnotificationmanager.so.1 #20 0x00007fb67070552d in ?? () from /usr/lib/libnotificationmanager.so.1 #21 0x00007fb6707061e7 in NotificationManager::Notifications::qt_metacall(QMetaObject::Call, int, void**) () from /usr/lib/libnotificationmanager.so.1 #22 0x00007fb6dff37a03 in QQmlObjectOrGadget::metacall (this=<optimized out>, type=<optimized out>, index=<optimized out>, argv=<optimized out>) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/qml/qqmlobjectorgadget.cpp:14 #23 0x00007fb6dfde8311 in QV4::CallMethod (object=..., index=<optimized out>, returnType=..., argCount=<optimized out>, argTypes=<optimized out>, engine=<optimized out>, callArgs=<optimized out>, callType=<optimized out>) at /usr/include/qt6/QtCore/qvarlengtharray.h:90 #24 QV4::QObjectMethod::callPrecise (object=..., data=..., engine=<optimized out>, callArgs=<optimized out>, callType=<optimized out>) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:2081 #25 0x00007fb6dfdf20dd in operator() (__closure=<optimized out>) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:3113 #26 operator()<QV4::QObjectMethod::callInternal(const QV4::Value*, const QV4::Value*, int) const::<lambda()> > (__closure=<synthetic pointer>, call=...) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:3090 #27 QV4::QObjectMethod::callInternal (this=0x7ffe527ad5e8, thisObject=<optimized out>, argv=0x7fb6b66f6578, argc=1) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:3113 #28 0x00007fb6dfe0f91d in QV4::FunctionObject::call (this=0x7ffe527ad5e8, thisObject=0x7fb6b66f6560, argv=0x7fb6b66f6578, argc=1) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4functionobject_p.h:187 #29 QV4::Runtime::CallPropertyLookup::call (engine=0x55d5ea3f4eb0, base=..., index=<optimized out>, argv=0x7fb6b66f6578, argc=1) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/jsruntime/qv4runtime.cpp:1562 #30 0x00007fb67abfa70e in ?? () ``` I didn't think of checking what Pipewire was doing but after killing it made Plasma responsive again. So it's possible that there's also some Pipewire bug but even if so it still shouldn't break whole Plasma.
Happened again, this is how Pipewire looks like ``` Thread 3 (Thread 0x7f627c8d96c0 (LWP 389048) "data-loop.0"): #0 __syscall_cancel_arch () at ../sysdeps/unix/sysv/linux/x86_64/syscall_cancel.S:56 #1 0x00007f627d2931ac in __internal_syscall_cancel (a1=<optimized out>, a2=a2@entry=140060973173344, a3=<optimized out>, a4=<optimized out>, a5=a5@entry=0, a6=a6@entry=0, nr=232) at cancellation.c:49 #2 0x00007f627d2931f4 in __syscall_cancel (a1=<optimized out>, a2=a2@entry=140060973173344, a3=<optimized out>, a4=<optimized out>, a5=a5@entry=0, a6=a6@entry=0, nr=232) at cancellation.c:75 #3 0x00007f627d31acf5 in epoll_wait (epfd=<optimized out>, events=events@entry=0x7f627c8d8a60, maxevents=<optimized out>, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30 #4 0x00007f627d62fc2a in impl_pollfd_wait (object=<optimized out>, pfd=<optimized out>, ev=0x7f627c8d8c20, n_ev=<optimized out>, timeout=<optimized out>) at ../pipewire/spa/plugins/support/system.c:138 #5 0x00007f627d61cc7f in spa_system_pollfd_wait (object=<optimized out>, pfd=<optimized out>, ev=0x7f627c8d8c20, n_ev=32, timeout=-1) at ../pipewire/spa/include/spa/support/system.h:154 #6 loop_iterate (object=0x56550306abe8, timeout=-1) at ../pipewire/spa/plugins/support/loop.c:701 #7 0x00007f627d529e01 in do_loop (user_data=0x565503065220) at ../pipewire/src/pipewire/data-loop.c:67 #8 0x00007f627d2969cb in start_thread (arg=<optimized out>) at pthread_create.c:448 #9 0x00007f627d31aa0c in __GI___clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78 Thread 2 (Thread 0x7f627bc906c0 (LWP 389050) "X11 Bell"): #0 __syscall_cancel_arch () at ../sysdeps/unix/sysv/linux/x86_64/syscall_cancel.S:56 #1 0x00007f627d2931ac in __internal_syscall_cancel (a1=<optimized out>, a2=a2@entry=140060960291440, a3=<optimized out>, a4=<optimized out>, a5=a5@entry=0, a6=a6@entry=0, nr=232) at cancellation.c:49 #2 0x00007f627d2931f4 in __syscall_cancel (a1=<optimized out>, a2=a2@entry=140060960291440, a3=<optimized out>, a4=<optimized out>, a5=a5@entry=0, a6=a6@entry=0, nr=232) at cancellation.c:75 #3 0x00007f627d31acf5 in epoll_wait (epfd=<optimized out>, events=events@entry=0x7f627bc8fa70, maxevents=<optimized out>, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30 #4 0x00007f627d62fc2a in impl_pollfd_wait (object=<optimized out>, pfd=<optimized out>, ev=0x7f627bc8fc30, n_ev=<optimized out>, timeout=<optimized out>) at ../pipewire/spa/plugins/support/system.c:138 #5 0x00007f627d61cc7f in spa_system_pollfd_wait (object=<optimized out>, pfd=<optimized out>, ev=0x7f627bc8fc30, n_ev=32, timeout=-1) at ../pipewire/spa/include/spa/support/system.h:154 #6 loop_iterate (object=0x56550309fc88, timeout=-1) at ../pipewire/spa/plugins/support/loop.c:701 #7 0x00007f627d588014 in spa_loop_control_iterate_fast (object=<optimized out>, timeout=-1) at ../pipewire/spa/include/spa/support/loop.h:312 #8 pw_loop_iterate (object=<optimized out>, timeout=-1) at ../pipewire/src/pipewire/loop.h:89 #9 do_loop (user_data=0x56550309fa50) at ../pipewire/src/pipewire/thread-loop.c:294 #10 0x00007f627d2969cb in start_thread (arg=<optimized out>) at pthread_create.c:448 #11 0x00007f627d31aa0c in __GI___clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78 Thread 1 (Thread 0x7f627d4d5740 (LWP 389044) "pipewire"): #0 __syscall_cancel_arch () at ../sysdeps/unix/sysv/linux/x86_64/syscall_cancel.S:56 #1 0x00007f627d2931ac in __internal_syscall_cancel (a1=<optimized out>, a2=a2@entry=140728001615536, a3=<optimized out>, a4=<optimized out>, a5=a5@entry=0, a6=a6@entry=0, nr=232) at cancellation.c:49 #2 0x00007f627d2931f4 in __syscall_cancel (a1=<optimized out>, a2=a2@entry=140728001615536, a3=<optimized out>, a4=<optimized out>, a5=a5@entry=0, a6=a6@entry=0, nr=232) at cancellation.c:75 #3 0x00007f627d31acf5 in epoll_wait (epfd=<optimized out>, events=events@entry=0x7ffdca8bd6b0, maxevents=<optimized out>, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30 #4 0x00007f627d62fc2a in impl_pollfd_wait (object=<optimized out>, pfd=<optimized out>, ev=0x7ffdca8bd870, n_ev=<optimized out>, timeout=<optimized out>) at ../pipewire/spa/plugins/support/system.c:138 #5 0x00007f627d61cc7f in spa_system_pollfd_wait (object=<optimized out>, pfd=<optimized out>, ev=0x7ffdca8bd870, n_ev=32, timeout=-1) at ../pipewire/spa/include/spa/support/system.h:154 #6 loop_iterate (object=0x565503062648, timeout=-1) at ../pipewire/spa/plugins/support/loop.c:701 #7 0x00007f627d54de31 in spa_loop_control_iterate_fast (object=<optimized out>, timeout=-1) at ../pipewire/spa/include/spa/support/loop.h:312 #8 pw_loop_iterate (object=<optimized out>, timeout=-1) at ../pipewire/src/pipewire/loop.h:89 #9 pw_main_loop_run (loop=loop@entry=0x5655030624e0) at ../pipewire/src/pipewire/main-loop.c:130 #10 0x00005654f3f8b535 in main (argc=<optimized out>, argv=<optimized out>) at ../pipewire/src/daemon/pipewire.c:130 ``` Currently quickest workaround seems to be `killall pipewire`, everything restarts automatically so no issues afterwards.
Thanks for the bug report and your diligence in getting these bactraces. Those are helpful. I'll let those more familiar with the audio notification system take a closer look.