aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFerdinand Bachmann <ferdinand.bachmann@yrlf.at>2025-02-18 01:51:49 +0100
committerSimon Ser <contact@emersion.fr>2025-04-13 23:40:56 +0200
commit0a9b0b83ebfffc3b5b456b49d8cfe76736fe011b (patch)
tree0afcb84e0e2274dbe46fcfbfdeeee042529afd70
parent583862e6d11c44bb7a66dbc4dbdf029b517df18b (diff)
server: remove event listeners on fini
This fixes a crash in wlroots listener checks. See #8509.
-rw-r--r--sway/server.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/sway/server.c b/sway/server.c
index 5de6648f..fc2ba819 100644
--- a/sway/server.c
+++ b/sway/server.c
@@ -460,8 +460,29 @@ bool server_init(struct sway_server *server) {
}
void server_fini(struct sway_server *server) {
+ // remove listeners
+ wl_list_remove(&server->renderer_lost.link);
+ wl_list_remove(&server->new_output.link);
+ wl_list_remove(&server->layer_shell_surface.link);
+ wl_list_remove(&server->xdg_shell_toplevel.link);
+ wl_list_remove(&server->server_decoration.link);
+ wl_list_remove(&server->xdg_decoration.link);
+ wl_list_remove(&server->pointer_constraint.link);
+ wl_list_remove(&server->output_manager_apply.link);
+ wl_list_remove(&server->output_manager_test.link);
+ wl_list_remove(&server->output_power_manager_set_mode.link);
+#if WLR_HAS_DRM_BACKEND
+ wl_list_remove(&server->drm_lease_request.link);
+#endif
+ wl_list_remove(&server->tearing_control_new_object.link);
+ wl_list_remove(&server->xdg_activation_v1_request_activate.link);
+ wl_list_remove(&server->xdg_activation_v1_new_token.link);
+ wl_list_remove(&server->request_set_cursor_shape.link);
+
// TODO: free sway-specific resources
#if WLR_HAS_XWAYLAND
+ wl_list_remove(&server->xwayland_surface.link);
+ wl_list_remove(&server->xwayland_ready.link);
wlr_xwayland_destroy(server->xwayland.wlr_xwayland);
#endif
wl_display_destroy_clients(server->wl_display);