Assert (almost all) signals have no attached listeners on destroy

This commit is contained in:
Kirill Primak 2024-11-22 20:32:32 +03:00
parent b03b05d2b3
commit 8f56f7ca43
79 changed files with 518 additions and 9 deletions

View file

@ -455,7 +455,13 @@ void wlr_xwayland_server_destroy(struct wlr_xwayland_server *server) {
}
server_finish_process(server);
server_finish_display(server);
wl_signal_emit_mutable(&server->events.destroy, NULL);
assert(wl_list_empty(&server->events.start.listener_list));
assert(wl_list_empty(&server->events.ready.listener_list));
assert(wl_list_empty(&server->events.destroy.listener_list));
free(server);
}

View file

@ -178,6 +178,7 @@ struct wlr_xwayland_shell_v1 *wlr_xwayland_shell_v1_create(
}
wl_list_init(&shell->surfaces);
wl_signal_init(&shell->events.new_surface);
wl_signal_init(&shell->events.destroy);
@ -196,6 +197,9 @@ void wlr_xwayland_shell_v1_destroy(struct wlr_xwayland_shell_v1 *shell) {
wl_signal_emit_mutable(&shell->events.destroy, NULL);
assert(wl_list_empty(&shell->events.new_surface.listener_list));
assert(wl_list_empty(&shell->events.destroy.listener_list));
struct wlr_xwayland_surface_v1 *xwl_surface, *tmp;
wl_list_for_each_safe(xwl_surface, tmp, &shell->surfaces, link) {
xwl_surface_destroy(xwl_surface);

View file

@ -81,6 +81,11 @@ void wlr_xwayland_destroy(struct wlr_xwayland *xwayland) {
wl_signal_emit_mutable(&xwayland->events.destroy, NULL);
assert(wl_list_empty(&xwayland->events.destroy.listener_list));
assert(wl_list_empty(&xwayland->events.new_surface.listener_list));
assert(wl_list_empty(&xwayland->events.ready.listener_list));
assert(wl_list_empty(&xwayland->events.remove_startup_info.listener_list));
wl_list_remove(&xwayland->server_destroy.link);
wl_list_remove(&xwayland->server_start.link);
wl_list_remove(&xwayland->server_ready.link);

View file

@ -209,6 +209,7 @@ static struct wlr_xwayland_surface *xwayland_surface_create(
wl_list_init(&surface->stack_link);
wl_list_init(&surface->parent_link);
wl_list_init(&surface->unpaired_link);
wl_signal_init(&surface->events.destroy);
wl_signal_init(&surface->events.request_configure);
wl_signal_init(&surface->events.request_move);
@ -569,6 +570,40 @@ static void xwayland_surface_destroy(struct wlr_xwayland_surface *xsurface) {
wl_signal_emit_mutable(&xsurface->events.destroy, NULL);
assert(wl_list_empty(&xsurface->events.destroy.listener_list));
assert(wl_list_empty(&xsurface->events.request_configure.listener_list));
assert(wl_list_empty(&xsurface->events.request_move.listener_list));
assert(wl_list_empty(&xsurface->events.request_resize.listener_list));
assert(wl_list_empty(&xsurface->events.request_minimize.listener_list));
assert(wl_list_empty(&xsurface->events.request_maximize.listener_list));
assert(wl_list_empty(&xsurface->events.request_fullscreen.listener_list));
assert(wl_list_empty(&xsurface->events.request_activate.listener_list));
assert(wl_list_empty(&xsurface->events.request_close.listener_list));
assert(wl_list_empty(&xsurface->events.request_sticky.listener_list));
assert(wl_list_empty(&xsurface->events.request_shaded.listener_list));
assert(wl_list_empty(&xsurface->events.request_skip_taskbar.listener_list));
assert(wl_list_empty(&xsurface->events.request_skip_pager.listener_list));
assert(wl_list_empty(&xsurface->events.request_above.listener_list));
assert(wl_list_empty(&xsurface->events.request_below.listener_list));
assert(wl_list_empty(&xsurface->events.request_demands_attention.listener_list));
assert(wl_list_empty(&xsurface->events.associate.listener_list));
assert(wl_list_empty(&xsurface->events.dissociate.listener_list));
assert(wl_list_empty(&xsurface->events.set_class.listener_list));
assert(wl_list_empty(&xsurface->events.set_role.listener_list));
assert(wl_list_empty(&xsurface->events.set_title.listener_list));
assert(wl_list_empty(&xsurface->events.set_parent.listener_list));
assert(wl_list_empty(&xsurface->events.set_startup_id.listener_list));
assert(wl_list_empty(&xsurface->events.set_window_type.listener_list));
assert(wl_list_empty(&xsurface->events.set_hints.listener_list));
assert(wl_list_empty(&xsurface->events.set_decorations.listener_list));
assert(wl_list_empty(&xsurface->events.set_strut_partial.listener_list));
assert(wl_list_empty(&xsurface->events.set_override_redirect.listener_list));
assert(wl_list_empty(&xsurface->events.set_geometry.listener_list));
assert(wl_list_empty(&xsurface->events.focus_in.listener_list));
assert(wl_list_empty(&xsurface->events.grab_focus.listener_list));
assert(wl_list_empty(&xsurface->events.map_request.listener_list));
assert(wl_list_empty(&xsurface->events.ping_timeout.listener_list));
if (xsurface == xsurface->xwm->focus_surface) {
xwm_surface_activate(xsurface->xwm, NULL);
}