From 22170bde77a92126ab5c183604634bbb2b89a10a Mon Sep 17 00:00:00 2001 From: db Date: Tue, 1 May 2018 17:38:55 +0200 Subject: Fix layer surface crash on output destroy Before freeing sway_output, NULL the wlr_output reference to it. Check for that NULL in layer_shell handle_destroy. Don't damage null container in unmap. Additionaly, terminate swaybg if its output is being disabled. --- sway/desktop/layer_shell.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'sway/desktop/layer_shell.c') diff --git a/sway/desktop/layer_shell.c b/sway/desktop/layer_shell.c index 03419ac1..c904880d 100644 --- a/sway/desktop/layer_shell.c +++ b/sway/desktop/layer_shell.c @@ -255,6 +255,9 @@ static void unmap(struct sway_layer_surface *sway_layer) { return; } struct sway_output *output = wlr_output->data; + if (output == NULL) { + return; + } output_damage_surface(output, sway_layer->geo.x, sway_layer->geo.y, sway_layer->layer_surface->surface, true); } @@ -274,9 +277,11 @@ static void handle_destroy(struct wl_listener *listener, void *data) { wl_list_remove(&sway_layer->surface_commit.link); if (sway_layer->layer_surface->output != NULL) { struct sway_output *output = sway_layer->layer_surface->output->data; - arrange_layers(output); - + if (output != NULL) { + arrange_layers(output); + } wl_list_remove(&sway_layer->output_destroy.link); + sway_layer->layer_surface->output = NULL; } free(sway_layer); } -- cgit v1.2.3-54-g00ecf