From 9b15e81cff62eb214c89f62bc9e499c7f21d86cf Mon Sep 17 00:00:00 2001
From: Ryan Dwyer <ryandwyer1@gmail.com>
Date: Mon, 25 Jun 2018 16:41:31 +1000
Subject: Fix potential crash when fullscreen view unmaps

It happened when a view is a grandchild or deeper of the workspace, is
fullscreen, and unmaps. The workspace would not be included in the
transaction and its pointer to the fullscreen view was left dangling.
---
 sway/tree/view.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

(limited to 'sway/tree/view.c')

diff --git a/sway/tree/view.c b/sway/tree/view.c
index cb36f123..2ca0dbbb 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -542,14 +542,16 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface) {
 struct sway_container *view_unmap(struct sway_view *view) {
 	wl_signal_emit(&view->events.unmap, view);
 
+	wl_list_remove(&view->surface_new_subsurface.link);
+	wl_list_remove(&view->container_reparent.link);
+
 	if (view->is_fullscreen) {
 		struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE);
 		ws->sway_workspace->fullscreen = NULL;
+		container_destroy(view->swayc);
+		return ws;
 	}
 
-	wl_list_remove(&view->surface_new_subsurface.link);
-	wl_list_remove(&view->container_reparent.link);
-
 	return container_destroy(view->swayc);
 }
 
-- 
cgit v1.2.3