hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
https://hyprland.org
BSD 3-Clause "New" or "Revised" License
21.58k stars 902 forks source link

Crash when waking from dpms sleep #7482

Closed zakk4223 closed 2 months ago

zakk4223 commented 2 months ago

Regression?

Yes

System Info and Version

System/Version info ```sh Hyprland, built from branch main at commit 883463f9dd7f1cdc68c3e32017c0a71ccbe39b26 (animations: add workspace in/out configs). Date: Wed Aug 21 08:38:07 2024 Tag: v0.42.0-50-g883463f9, commits: 5119 flags: (if any) System Information: System name: Linux Node name: blkheart Release: 6.10.6-1-cachyos-eevdf Version: #1 SMP PREEMPT_DYNAMIC Mon, 19 Aug 2024 21:40:51 +0000 GPU information: 0d:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] [1002:73bf] (rev c0) (prog-if 00 [VGA controller]) os-release: NAME="Arch Linux" PRETTY_NAME="Arch Linux" ID=arch BUILD_ID=rolling ANSI_COLOR="38;2;23;147;209" HOME_URL="https://archlinux.org/" DOCUMENTATION_URL="https://wiki.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/" BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues" PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/" LOGO=archlinux-logo plugins: hypreasymotion by Zakk ver 1.0 Workspace layouts by Zakk ver 1.0 hyprsplit by shezdy ver 1.0 XWayland Primary Display by Zakk ver 1.0 N_Stack layout by Zakk ver 1.0 ======Config-Start====== Config File: /home/zakk/.config/hypr/hyprland.conf: Read Succeeded # # Please note not all available settings / options are set here. # For a full list, see the wiki (basic and advanced configuring) # #monitor=,preferred,auto,1 source=~/.config/hypr/config.d/environment.conf source=~/.config/hypr/config.d/vars.conf #exec-once = $HOME/.local/share/hyprland/bin/load_plugins.sh exec-once = /home/zakk/proj/Hyprland/build/hyprpm/hyprpm reload -n -v > /tmp/hyprpm.wtf monitor=desc:Dell Inc. DELL U2414H R9F1P45A34CL,preferred,0x0,1 monitor=desc:LG Electronics LG ULTRAGEAR 008NTCZET747,3440x1440@160,1920x0,1 monitor=desc:Dell Inc. DELL U2414H R9F1P45D5L8L,preferred,5360x0,1 monitor=HDMI-A-1,preferred,7280x0,1 #monitor=HDMI-A-1,3840x2160@60,7280x0,2 monitor=WL-1,preferred,0x0,1 input { kb_file= kb_layout= kb_variant= kb_model= kb_options= kb_rules= repeat_rate=50 repeat_delay=300 follow_mouse=1 touchpad { natural_scroll=no } sensitivity=0 # -1.0 - 1.0, 0 means no modification. } cursor { no_hardware_cursors = false no_break_fs_vrr = true } general { gaps_in=8 gaps_out=20 border_size=2 col.active_border=rgb(a6e3a1) #col.active_border=0x66ee1111 col.inactive_border=rgb(40a02b) layout=workspacelayout resize_on_border=true hover_icon_on_border=false allow_tearing = true apply_sens_to_raw=0 # whether to apply the sensitivity to raw input (e.g. used by games where you aim using your mouse) #damage_tracking=full # leave it on full unless you hate your GPU and want to make it suffer } render { direct_scanout=false } decoration { dim_special=0 rounding=0 active_opacity = 1.0 inactive_opacity = 1.0 fullscreen_opacity = 1.0 drop_shadow = true shadow_range = 30 shadow_render_power = 3 col.shadow = 0x66000000 blur { enabled = true size = 6 passes = 2 ignore_opacity = true xray = false } } animations { enabled=0 animation=fadeOut,1,5000,default animation=border,1,10,default animation=workspaces,1,6,default } dwindle { pseudotile=0 # enable pseudotiling on dwindle } master { no_gaps_when_only=false new_on_top=true orientation=top always_center_master=true inherit_fullscreen=false } gestures { workspace_swipe=no } misc { vfr=true vrr=0 disable_hyprland_logo=true animate_mouse_windowdragging=false animate_manual_resizes=false focus_on_activate=false } #workspace=m[desc:Dell Inc. DELL U2414H R9F1P45A34CL],layoutopt:nstack-stacks:2,layoutopt:nstack-single_mfact:0.9 #workspace=m[desc:Dell Inc. DELL U2414H R9F1P45D5L8L],layoutopt:nstack-stacks:2,layoutopt:nstack-single_mfact:0.9 workspace=m[DP-4],layoutopt:nstack-stacks:2,layoutopt:nstack-single_mfact:0.9 workspace=m[DP-6],layoutopt:nstack-stacks:2,layoutopt:nstack-single_mfact:0.9 #workspace=d[w<=1920],layoutopt:nstack-stacks:2,layoutopt:nstack-single_mfact:0.9 # example window rules # for windows named/classed as abc and xyz #windowrule=move 69 420,abc #windowrule=size 420 69,abc #windowrule=tile,xyz #windowrule=float,abc #windowrule=pseudo,abc #windowrule=monitor 0,xyz #windowrulev2 = forceinput,xwayland:1 #windowrulev2 = idleinhibit fullscreen,class:^.*$ #windowrule = nofullscreenrequest, ^.*$ # windowrulev2 = float,class:^awakened-poe-trade$ windowrulev2 = noblur,class:^awakened-poe-trade$ #windowrulev2 = nofocus, class:^awakened-poe-trade$ #windowrulev2 = immediate,class:steam_app_1364760 #windowrulev2 = immediate,fullscreen:1 #windowrulev2 = stayfocused, title:^(.*)$,class:^(steam)$ #windowrulev2 = minsize 1 1, title:^(.*)$,class:^(steam)$ # windowrulev2 = suppressevent activatefocus,initialClass:^(steam)$ submap=__easymotionsubmap__ bind=SUPER,z,exec,hyprctl dispatch easymotionexit submap=reset # some nice mouse binds bindm=SUPER,mouse:272,movewindow bindm=SUPER,mouse:273,resizewindow # example binds bind=SUPER,RETURN,exec,$terminal bind=SUPER,W,killactive, bind=SUPER_SHIFT,SPACE,togglefloating, bind=SUPER,SPACE,exec,rofi -show drun -log /tmp/rofi.log bind=SUPER,P,pseudo, bind=SUPER,F,fullscreen,0 bind=SUPER_SHIFT,F,fullscreen,1 bind=SUPER,h,movefocus,l bind=SUPER,l,movefocus,r bind=SUPER,k,movefocus,u bind=SUPER,j,movefocus,d bind=SUPER_SHIFT,h,movewindow,l bind=SUPER_SHIFT,l,movewindow,r bind=SUPER_SHIFT,k,movewindow,u bind=SUPER_SHIFT,j,movewindow,d bind=SUPER_SHIFT,e,exec,wlogout -b 2 --protocol layer-shell bind=SUPER,delete,layoutmsg,orientationnext bind=SUPER_SHIFT,RETURN,layoutmsg,swapwithmaster bind=SUPER,s,exec,$HOME/.config/hypr/scripts/scratchpad_show_or_create.sh 'wez_scratch' 'wezterm start --class wez_scratch' bind=,Print,exec,/usr/bin/grimblast --notify copysave output bind=SUPER,Print,exec,/usr/bin/grimblast --notify copy area bind=SUPER_SHIFT,Print,exec,/usr/bin/grimshot --notify copysave area bind=CTRL,Print,exec,killall -SIGUSR1 gpu-screen-recorder #bind=SUPER_ALT,l,exec,/home/zakk/hyprlayout.sh bind = SUPER,PAUSE,pass,^(com\.obsproject\.Studio)$ bind=ALT_CTRL,right,cyclenext bind=ALT_CTRL,right,alterzorder,top bind=ALT_CTRL,left,cyclenext,prev bind=ALT_CTRL,left,alterzorder,top bind=SUPER,z,easymotion,action:hyprctl dispatch focuswindow address:{} source=~/.config/hypr/config.d/systemd-session.conf source=~/.config/hypr/config.d/workspaces.conf source=~/.config/hypr/config.d/floating.conf debug { suppress_errors=true disable_logs=false enable_stdout_logs=true } plugin { easymotion { textsize = 100 rounding = 10 } hyprwinwrap { class=awakened-poe-trade } wslayout { default_layout=nstack layouts=nstack monocle } xwaylandprimary { display=DP-1 } nstack { layout { mfact=0.0 new_on_top=true center_single_master=true stacks=3 } } hyprbars { # example config bar_height = 20 # example buttons (R -> L) # hyprbars-button = color, size, on-click hyprbars-button = rgb(ff4040), 10, 󰖭, hyprctl dispatch killactive hyprbars-button = rgb(eeee11), 10, , hyprctl dispatch fullscreen 1 } } xwayland { force_zero_scaling = true } Config File: /home/zakk/.config/hypr/config.d/environment.conf: Read Succeeded env = XDG_CURRENT_DESKTOP,Hyprland env = XDG_SESSION_TYPE,wayland env = XDG_SESSION_DESKTOP,Hyprland env = MOZ_ENABLE_WAYLAND,1 env = QT_AUTO_SCREEN_SCALE_FACTOR,1 env = QT_QPA_PLATFORM,wayland;xcb env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 env = QT_QPA_PLATFORMTHEME,qt5ct env = SDL_VIDEODRIVER,wayland env = _JAVA_AWT_WM_NONEREPARENTING,1 env = CLUTTER_BACKEND,wayland env = GDK_BACKEND,wayland,x11 #env = AQ_NO_ATOMIC,1 Config File: /home/zakk/.config/hypr/config.d/vars.conf: Read Succeeded $terminal = "kitty" $filemanager = "thunar" Config File: /home/zakk/.config/hypr/config.d/systemd-session.conf: Read Succeeded exec-once=~/.config/hypr/scripts/session.sh --add-env HYPRLAND_INSTANCE_SIGNATURE Config File: /home/zakk/.config/hypr/config.d/workspaces.conf: Read Succeeded bind=SUPER,1,split:workspace,1 bind=SUPER,2,split:workspace,2 bind=SUPER,3,split:workspace,3 bind=SUPER,4,split:workspace,4 bind=SUPER,5,split:workspace,5 bind=SUPER,6,split:workspace,6 bind=SUPER,7,split:workspace,7 bind=SUPER,8,split:workspace,8 bind=SUPER,9,split:workspace,9 bind=SUPER,0,split:workspace,10 bind=SUPER_SHIFT,1,split:movetoworkspace,1 bind=SUPER_SHIFT,2,split:movetoworkspace,2 bind=SUPER_SHIFT,3,split:movetoworkspace,3 bind=SUPER_SHIFT,4,split:movetoworkspace,4 bind=SUPER_SHIFT,5,split:movetoworkspace,5 bind=SUPER_SHIFT,6,split:movetoworkspace,6 bind=SUPER_SHIFT,7,split:movetoworkspace,7 bind=SUPER_SHIFT,8,split:movetoworkspace,8 bind=SUPER_SHIFT,9,split:movetoworkspace,9 bind=SUPER_SHIFT,0,split:movetoworkspace,10 bind=SUPER,e,togglespecialworkspace,file bind=SUPER,F1,focusmonitor,DP-4 bind=SUPER,F2,focusmonitor,DP-1 bind=SUPER,F3,focusmonitor,DP-6 bind=SUPER,F5,focusmonitor,HDMI-A-1 bind=SUPER_SHIFT,F1,movewindow,mon:DP-4 bind=SUPER_SHIFT,F2,movewindow,mon:DP-1 bind=SUPER_SHIFT,F3,movewindow,mon:DP-6 bind=SUPER_SHIFT,F5,movewindow,mon:HDMI-A-1 workspace=special:file,on-created-empty:$filemanager Config File: /home/zakk/.config/hypr/config.d/floating.conf: Read Succeeded windowrulev2 = float,class:^(pavucontrol)$ windowrulev2 = float,class:^(nm-connection-editor)$ windowrulev2 = float,class:^(nm-openconnect-auth-dialog)$ windowrulev2 = opacity 0.0 override 0.0 override,initialTitle:^(Wine System Tray)$ windowrulev2 = noanim,initialTitle:^(Wine System Tray)$ windowrulev2 = noinitialfocus,initialTitle:^(Wine System Tray)$ windowrulev2 = maxsize 1 1,initialTitle:^(Wine System Tray)$ windowrulev2 = noblur,initialTitle:^(Wine System Tray)$ ======Config-End======== ```

Description

Crash when waking up from dpms sleep invoked from hypridle (hyprctl dispatch dpms off).

How to reproduce

Just let hypridle sleep the display(s). Then wiggle the mouse to wake up. It seems to not happen if you do it immediately after sleep (maybe one of the monitors isn't fully slept yet...?).

It looks like it only happens with software cursors. I switched to hardware cursors and it seems ok so far.

Ignore loaded plugins, issue happens without them and crash report etc is from an instance without any plugins loaded.

I'll try to bisect sometime tomorrow when I have more time

Crash reports, logs, images, videos

hyprlandCrashReport28287.txt

vaxerski commented 2 months ago

update, iirc fixed if not dupe

zakk4223 commented 2 months ago

Happens on latest -git, including latest git of AQ, hyprcursor, hyprutils.

I just wasted a ton of time trying to bisect this and either I didn't go back far enough (0.42!) or it's some combo of aq/cursor versions. Also annoying because you have to wait some amount of time after the lock to trigger the crash. Why I have no idea.

Looking at the debug crash dump it looks like it requires no_break_fs_vrr enabled along with software cursors.

#7  0x00005a3713e45554 in CMonitor::shouldSkipScheduleFrameOnMouseEvent (this=0x5a372e1ae6c0) at /home/zakk/proj/Hyprland/src/helpers/Monitor.cpp:377
377        *PNOBREAK && output->state->state().adaptiveSync && activeWorkspace && activeWorkspace->m_bHasFullscreenWindow && activeWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN;
(gdb) p output
$1 = {impl_ = 0x0}

that seems not good

vaxerski commented 2 months ago

that is not good and should not happen

zakk4223 commented 2 months ago

Still a thing in 0.43.

managed to actually bisect: 511eea71c60e10f3d3d757a376f1ca98b9034ae0

Although I'm not sure that bisect makes any sense given the crash backtrace?

vaxerski commented 2 months ago

doesnt

vaxerski commented 2 months ago

patch.txt but try thius

zakk4223 commented 2 months ago

The change does fix it, but I'm seeing a similar one when waking up with a screen capture active. Same thing, pMonitor->output with impl_ = 0x0

hyprlandCrashReport65898.txt

I'm still trying to figure out exactly how to recreate it: It seems more likely if I wake up more than one monitor simultaneously.

#7  0x000060c2ba0adb14 in CHyprOpenGLImpl::getPreferredReadFormat (this=0x60c2f8d76120, pMonitor=0x60c2fb6524e0) at /home/zakk/proj/Hyprland/src/render/OpenGL.cpp:2960
2960       return pMonitor->output->state->state().drmFormat;
(gdb) p pMonitor->output
$1 = {impl_ = 0x0}