Skip to content

Commit e0fb430

Browse files
committed
meta-wayland-layer-shell.c: Avoid double-free during unclean client
disconnects.
1 parent 28d652b commit e0fb430

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

src/wayland/meta-wayland-layer-shell.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,17 @@ meta_wayland_layer_surface_dispose (GObject *object)
987987
g_object_remove_weak_pointer (G_OBJECT (layer_surface->output),
988988
(gpointer *) &layer_surface->output);
989989

990+
/* The wl_resource and this role object have independent lifetimes. If the
991+
* object is finalized first (e.g. an abrupt client disconnect tears down the
992+
* wl_surface, and thus this role, before the layer-surface resource), detach
993+
* the resource so layer_surface_resource_destroyed() does not dereference and
994+
* free()-twice this now-dead object. */
995+
if (layer_surface->resource)
996+
{
997+
wl_resource_set_user_data (layer_surface->resource, NULL);
998+
layer_surface->resource = NULL;
999+
}
1000+
9901001
g_clear_pointer (&layer_surface->namespace, g_free);
9911002

9921003
G_OBJECT_CLASS (meta_wayland_layer_surface_parent_class)->dispose (object);

0 commit comments

Comments
 (0)