diff --git a/src/backend/wayland/wl_backend.c b/src/backend/wayland/wl_backend.c index 4cf0713..f2683db 100644 --- a/src/backend/wayland/wl_backend.c +++ b/src/backend/wayland/wl_backend.c @@ -2854,6 +2854,10 @@ wl_event_loop_run(void) NULL); if (wl_state.sigfd_source) { wwarning("wl_backend: signalfd installed for SIGTERM/SIGINT/SIGHUP"); + /* Disable the old signal handlers — signalfd owns these now */ + signal(SIGTERM, SIG_DFL); + signal(SIGINT, SIG_DFL); + signal(SIGHUP, SIG_DFL); } else { wwarning("wl_backend: wl_event_loop_add_fd failed; falling back to pipe"); close(wl_state.sigfd); @@ -2953,6 +2957,14 @@ wl_event_loop_run(void) } wwarning("wl_backend: event loop exited"); + + /* Remove pointer listeners before wlroots destroys the pointer device */ + if (wl_state.pointer_dev) { + wl_list_remove(&wl_state.real_pointer_motion_abs_listener.link); + wl_list_remove(&wl_state.real_pointer_button_listener.link); + wl_list_remove(&wl_state.real_pointer_frame_listener.link); + wl_list_remove(&wl_state.real_pointer_axis_listener.link); + } } static void