]> git.mdlowis.com Git - proto/labwc.git/commitdiff
layer: handle output_destroy.notify without crash
authorJohan Malm <jgm323@gmail.com>
Sun, 24 Apr 2022 21:24:47 +0000 (22:24 +0100)
committerJohan Malm <jgm323@gmail.com>
Sun, 24 Apr 2022 21:24:47 +0000 (22:24 +0100)
Steps to reproduce crash:
- run nested with two outputs (e.g. WLR_WL_OUTPUTS=2 ./build/labwc)
- start panel on one output (e.g. waybar)
- close that output

Backtrace pointed to output_destroy_notify() at ../src/layers.c:92

Reported-by: @Consolatis
src/layers.c

index d9e9afe9faa172e795551c10c5acd76d6c911271..9d18e23df1b7d5626199f742dae7d949ecc01137 100644 (file)
@@ -88,8 +88,7 @@ output_destroy_notify(struct wl_listener *listener, void *data)
 {
        struct lab_layer_surface *layer =
                wl_container_of(listener, layer, output_destroy);
-       wl_list_remove(&layer->output_destroy.link);
-       wlr_layer_surface_v1_destroy(layer->scene_layer_surface->layer_surface);
+       layer->scene_layer_surface->layer_surface->output = NULL;
 }
 
 static void
@@ -322,6 +321,12 @@ new_layer_surface_notify(struct wl_listener *listener, void *data)
 
        surface->scene_layer_surface = wlr_scene_layer_surface_v1_create(
                &selected_layer->node, layer_surface);
+       if (!surface->scene_layer_surface) {
+               wlr_layer_surface_v1_destroy(layer_surface);
+               wlr_log(WLR_ERROR, "could not create layer surface");
+               return;
+       }
+
        node_descriptor_create(surface->scene_layer_surface->node,
                LAB_NODE_DESC_LAYER_SURFACE, surface);