Skip to content

Commit 5a4956e

Browse files
authored
Fix use-after free and race conditions in Wayland idle inhibitation (#779)
1 parent 7e578fd commit 5a4956e

3 files changed

Lines changed: 19 additions & 0 deletions

File tree

src/wayland/meta-wayland-actor-surface.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,8 @@ meta_wayland_actor_surface_reset_actor (MetaWaylandActorSurface *actor_surface)
445445
G_CALLBACK (on_actor_destroyed),
446446
actor_surface);
447447

448+
meta_wayland_surface_notify_actor_changed (surface);
449+
448450
g_signal_connect_swapped (priv->actor, "notify::allocation",
449451
G_CALLBACK (meta_wayland_surface_notify_geometry_changed),
450452
surface);

src/wayland/meta-wayland-surface.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ enum
9595
SURFACE_SHORTCUTS_RESTORED,
9696
SURFACE_GEOMETRY_CHANGED,
9797
SURFACE_PRE_STATE_APPLIED,
98+
SURFACE_ACTOR_CHANGED,
9899
N_SURFACE_SIGNALS
99100
};
100101

@@ -1677,6 +1678,14 @@ meta_wayland_surface_class_init (MetaWaylandSurfaceClass *klass)
16771678
0, NULL, NULL,
16781679
g_cclosure_marshal_VOID__VOID,
16791680
G_TYPE_NONE, 0);
1681+
1682+
surface_signals[SURFACE_ACTOR_CHANGED] =
1683+
g_signal_new ("actor-changed",
1684+
G_TYPE_FROM_CLASS (object_class),
1685+
G_SIGNAL_RUN_LAST,
1686+
0, NULL, NULL,
1687+
g_cclosure_marshal_VOID__VOID,
1688+
G_TYPE_NONE, 0);
16801689
}
16811690

16821691
static void
@@ -1991,3 +2000,9 @@ meta_wayland_surface_get_height (MetaWaylandSurface *surface)
19912000
return height / surface->scale;
19922001
}
19932002
}
2003+
2004+
void
2005+
meta_wayland_surface_notify_actor_changed (MetaWaylandSurface *surface)
2006+
{
2007+
g_signal_emit (surface, surface_signals[SURFACE_ACTOR_CHANGED], 0);
2008+
}

src/wayland/meta-wayland-surface.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,8 @@ void meta_wayland_surface_notify_unmapped (MetaWaylandSurface *su
335335

336336
void meta_wayland_surface_update_outputs_recursively (MetaWaylandSurface *surface);
337337

338+
void meta_wayland_surface_notify_actor_changed (MetaWaylandSurface *surface);
339+
338340
int meta_wayland_surface_get_width (MetaWaylandSurface *surface);
339341
int meta_wayland_surface_get_height (MetaWaylandSurface *surface);
340342

0 commit comments

Comments
 (0)