scene: Assert all signals are clear when destroying

This commit is contained in:
Alexander Orzechowski 2024-11-22 09:55:51 -05:00
parent 24597bb971
commit 0d6cc471e9

View file

@ -126,6 +126,12 @@ void wlr_scene_node_destroy(struct wlr_scene_node *node) {
scene_buffer_set_texture(scene_buffer, NULL);
pixman_region32_fini(&scene_buffer->opaque_region);
wlr_drm_syncobj_timeline_unref(scene_buffer->wait_timeline);
assert(wl_list_empty(&scene_buffer->events.output_leave.listener_list));
assert(wl_list_empty(&scene_buffer->events.output_enter.listener_list));
assert(wl_list_empty(&scene_buffer->events.outputs_update.listener_list));
assert(wl_list_empty(&scene_buffer->events.output_sample.listener_list));
assert(wl_list_empty(&scene_buffer->events.frame_done.listener_list));
} else if (node->type == WLR_SCENE_NODE_TREE) {
struct wlr_scene_tree *scene_tree = wlr_scene_tree_from_node(node);
@ -150,6 +156,8 @@ void wlr_scene_node_destroy(struct wlr_scene_node *node) {
}
}
assert(wl_list_empty(&node->events.destroy.listener_list));
wl_list_remove(&node->link);
pixman_region32_fini(&node->visible);
free(node);
@ -1657,6 +1665,8 @@ void wlr_scene_output_destroy(struct wlr_scene_output *scene_output) {
scene_node_output_update(&scene_output->scene->tree.node,
&scene_output->scene->outputs, scene_output, NULL);
assert(wl_list_empty(&scene_output->events.destroy.listener_list));
struct highlight_region *damage, *tmp_damage;
wl_list_for_each_safe(damage, tmp_damage, &scene_output->damage_highlight_regions, link) {
highlight_region_destroy(damage);