Fix hyprctl crash when screensaver is terminated #4045
Merged
+1
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Fixes hyprctl SIGABRT crash that occurs when the screensaver window is closed (via lock screen, keyboard shortcut, or any other method).
Problem
When the screensaver is terminated externally, hyprctl crashes with SIGABRT. The crash occurs in the
exit_screensavertrap handler when it callshyprctl keyword cursor:invisible false.Note: Dismissing via mouse movement or keyboard input does NOT crash - the script exits naturally with valid stdout.
Root Cause
std::println()std::println()throwsstd::system_errorstd::terminate→ SIGABRTThe fix discards hyprctl's output so it writes to /dev/null instead of the dead terminal.
Changes
Redirect hyprctl output in the cleanup handler to prevent crash on broken stdout:
Reproduction Steps
Scenario A: Close with keybind
omarchy-launch-screensaver forcecoredumpctl list | grep hyprctlScenario B: Wait for lock screen
coredumpctl list | grep hyprctlExpected (before fix): New hyprctl crash entry with signal 6 (SIGABRT)
Expected (after fix): No new crash
Test Plan