summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ivi-shell/ivi-shell.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c
index a1473530..896ba1b4 100644
--- a/ivi-shell/ivi-shell.c
+++ b/ivi-shell/ivi-shell.c
@@ -155,9 +155,18 @@ static void
shell_destroy_shell_surface(struct wl_resource *resource)
{
struct ivi_shell_surface *ivisurf = wl_resource_get_user_data(resource);
- if (ivisurf != NULL) {
- ivisurf->resource = NULL;
- }
+
+ if (ivisurf == NULL)
+ return;
+
+ assert(ivisurf->resource == resource);
+
+ if (ivisurf->layout_surface != NULL)
+ layout_surface_cleanup(ivisurf);
+
+ wl_list_remove(&ivisurf->link);
+
+ free(ivisurf);
}
/* Gets called through the weston_surface destroy signal. */
@@ -172,13 +181,6 @@ shell_handle_surface_destroy(struct wl_listener *listener, void *data)
if (ivisurf->layout_surface != NULL)
layout_surface_cleanup(ivisurf);
-
- if (ivisurf->resource != NULL) {
- wl_resource_set_user_data(ivisurf->resource, NULL);
- ivisurf->resource = NULL;
- }
- free(ivisurf);
-
}
/* Gets called, when a client sends ivi_surface.destroy request. */