https://bugs.kde.org/show_bug.cgi?id=500951
Bug ID: 500951 Summary: KDE PowerDevil deadlock causes kwin_wayland to hang Classification: Plasma Product: plasmashell Version: 6.3.2 Platform: Arch Linux OS: Linux Status: REPORTED Severity: normal Priority: NOR Component: Power management & brightness Assignee: plasma-b...@kde.org Reporter: j...@jonawagner.me Target Milestone: 1.0 SUMMARY KDE PowerDevil runs into a deadlock which will cause 25 second kwin_wayland freeze if something tries to enable screen inhibitors (e.g. VLC or Firefox duing video playback) STEPS TO REPRODUCE 1. Get PowerDevil to deadlock (I assume this happens when screens are reconnected, maybe due to driver issues?). for testing the kwin_wayland hang you can just suspend the process `pkill -STOP org_kde_powerde` (resume with `pkill -CONT org_kde_powerde`) 2. Start VLC with a video OBSERVED RESULT System hangs for 25 seconds because kwin_wayland waits for the inhibit call to finish, blocking the main thread EXPECTED RESULT PowerDevil does not deadlock, kwin_wayland does freeze WORKAROUNDS Restarting PowerDevil (`systemctl --user restart plasma-powerdevil.service`) fixes the freezing issue (until it deadlocks again). You can also just stop it so it no longer causes issues (`systemctl --user stop plasma-powerdevil.service`). SOFTWARE/OS VERSIONS Linux/KDE Plasma: Arch Linux KDE Plasma Version: 6.3.2 KDE Frameworks Version: 6.11.0 Qt Version: 6.8.2 ADDITIONAL INFORMATION DBus monitor: method call time=1740911305.944531 sender=:1.129 -> destination=org.freedesktop.ScreenSaver serial=3 path=/ScreenSaver; interface=org.freedesktop.ScreenSaver; member=Inhibit string "vlc" string "Playing some media." method call time=1740911305.944673 sender=:1.9 -> destination=org.kde.Solid.PowerManagement.PolicyAgent serial=2091 path=/org/kde/Solid/PowerManagement/PolicyAgent; interface=org.kde.Solid.PowerManagement.PolicyAgent; member=AddInhibition uint32 4 string "vlc" string "Playing some media." # can't find any replies to these method calls GDB Backtrace of PowerDevil ``` #0 __syscall_cancel_arch () at ../sysdeps/unix/sysv/linux/x86_64/syscall_cancel.S:56 #1 0x00007602e7a9fe33 in __internal_syscall_cancel (a1=a1@entry=0, a2=a2@entry=0, a3=a3@entry=140733869441776, a4=a4@entry=0, a5=a5@entry=0, a6=a6@entry=0, nr=230) at cancellation.c:49 #2 0x00007602e7af0a82 in __GI___clock_nanosleep (clock_id=<optimized out>, clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7fff284bc2f0, rem=rem@entry=0x0) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:48 #3 0x00007602e7afcc27 in __GI___nanosleep (req=req@entry=0x7fff284bc2f0, rem=rem@entry=0x0) at ../sysdeps/unix/sysv/linux/nanosleep.c:25 #4 0x00007602e7b2761a in usleep (useconds=useconds@entry=100000) at ../sysdeps/posix/usleep.c:31 #5 0x00007602e6d2e7f0 in sleep_millis (milliseconds=100) at base/sleep.c:89 #6 0x00007602e6d282a5 in lock_display (dlr=0x5b97091df140, flags=flags@entry=DDISP_NONE) at base/display_lock.c:239 #7 0x00007602e6d28a14 in lock_display_by_dpath (dpath=..., flags=DDISP_NONE) at base/display_lock.c:393 #8 0x00007602e6d0b86c in i2c_open_bus (busno=4, callopts=callopts@entry=4 '\004', fd_loc=fd_loc@entry=0x7fff284bc4c4) at i2c/i2c_bus_core.c:273 #9 0x00007602e6d12e73 in i2c_check_bus (businfo=businfo@entry=0x5b9709281d90) at i2c/i2c_bus_core.c:1457 #10 0x00007602e6d13b99 in i2c_non_async_scan (i2c_buses=0x5b970919a0a0) at i2c/i2c_bus_core.c:1791 #11 0x00007602e6d14232 in i2c_detect_buses0 () at i2c/i2c_bus_core.c:1949 #12 0x00007602e6d143d5 in i2c_detect_buses () at i2c/i2c_bus_core.c:2014 #13 0x00007602e6cebea1 in dw_redetect_displays () at dw/dw_main.c:383 #14 0x00007602e6d48ed0 in ddca_redetect_displays () at libmain/api_displays.c:445 #15 0x00007602e889af25 in DDCutilPrivateSingleton::redetect (this=0x7602e88d0460 <DDCutilPrivateSingleton::instance()::singleton>) at /usr/src/debug/powerdevil/powerdevil-6.3.2/daemon/controllers/ddcutildetector.cpp:207 #16 0x00007602e75a2f4a in QObject::event (this=0x7602e88d0460 <DDCutilPrivateSingleton::instance()::singleton>, e=0x7602ac000f90) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:1418 #17 0x00007602e7555b00 in QCoreApplication::notifyInternal2 (receiver=0x7602e88d0460 <DDCutilPrivateSingleton::instance()::singleton>, event=event@entry=0x7602ac000f90) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1172 #18 0x00007602e7555edc in QCoreApplication::sendEvent (receiver=<optimized out>, event=0x7602ac000f90) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1612 #19 QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x5b9709140e50) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1946 #20 0x00007602e77c859c in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1800 #21 postEventSourceDispatch (s=0x5b97091456b0) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:246 #22 0x00007602e683c919 in g_main_dispatch (context=0x7602d8000f00) at ../glib/glib/gmain.c:3357 #23 0x00007602e689f5d7 in g_main_context_dispatch_unlocked (context=0x7602d8000f00) at ../glib/glib/gmain.c:4208 #24 g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x7602d8000f00, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4273 #25 0x00007602e683be15 in g_main_context_iteration (context=0x7602d8000f00, may_block=1) at ../glib/glib/gmain.c:4338 #26 0x00007602e77c575d in QEventDispatcherGlib::processEvents (this=0x5b9709145610, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:399 #27 0x00007602e75606a6 in QEventLoop::processEvents (this=0x7fff284bcc40, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:103 #28 QEventLoop::exec (this=0x7fff284bcc40, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:185 #29 0x00007602e75591d6 in QCoreApplication::exec () at /usr/src/debug/qt6-base/qtbase/src/corelib/global/qflags.h:74 #30 0x00005b96cbdeb727 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/powerdevil/powerdevil-6.3.2/daemon/powerdevilapp.cpp:134 ``` PowerDevil logs: ``` Mar 02 10:30:17 r9950 org_kde_powerdevil[1989]: [ 1989] Error queiscing libdducitl API. 1 active API calls outstanding. Mar 02 10:30:17 r9950 org_kde_powerdevil[1989]: org.kde.powerdevil: [DDCutilDisplay]: ddca_close_display -3032 Mar 02 10:30:17 r9950 org_kde_powerdevil[1989]: library quiesced, ddca_close_display temporarily unavailable Mar 02 10:30:17 r9950 org_kde_powerdevil[1989]: org.kde.powerdevil: [DDCutilDisplay]: ddca_open_display2 -3032 Mar 02 10:30:17 r9950 org_kde_powerdevil[1989]: [ 1989] Display redetection starting. Mar 02 10:30:17 r9950 org_kde_powerdevil[1989]: library quiesced, ddca_open_display3 temporarily unavailable Mar 02 10:30:17 r9950 org_kde_powerdevil[1989]: [ 20885] recheck thread terminating because watch thread terminated Mar 02 10:30:17 r9950 org_kde_powerdevil[1989]: [ 1989] Watch thread terminated. Mar 02 10:30:17 r9950 org_kde_powerdevil[1989]: [ 1989] Attempting to unlock display lock owned by different thread Mar 02 10:30:17 r9950 org_kde_powerdevil[1989]: [ 1989] Unexpected error DDCRC_LOCKED from unlock_display_by_dpath(Display_Path[/dev/i2c-4]) ``` -- You are receiving this mail because: You are watching all bug changes.