summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Fourdan <ofourdan@redhat.com>2018-05-03 09:17:24 +0200
committerJonas Ã…dahl <jadahl@gmail.com>2018-05-03 17:49:26 +0000
commitca0d56a3a436d09178af8fc6a387601c837eaced (patch)
treea8c1e4f6807c86abeb5f9cd57836615f5278de6c
parenta89baa44abb90603b5b092630a5d4daeb1140a4e (diff)
downloadmutter-ca0d56a3a436d09178af8fc6a387601c837eaced.tar.gz
wayland: avoid a crash in is_effectively_synchronized()
To check if a subsurface is effectively synchronized, we walk the subsurface hierarchy to look for a non-subsurface parent or a subsurface being synchronized. However, when client is closing, the parent surface might already be gone, in which case we end up with a surface being NULL which causes a NULL pointer dereference and a crash. Check if the parent surface is NULL to avoid the crash, and consider it's already synchronized if it is NULL to avoid further updates. Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/124 (cherry picked from commit 52fdd24467fa8d6f97bd5f9eb6d5509fa43436c6)
-rw-r--r--src/wayland/meta-wayland-surface.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index 92225cb6d..9fdad3eb9 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -580,7 +580,10 @@ meta_wayland_surface_is_effectively_synchronized (MetaWaylandSurface *surface)
{
MetaWaylandSurface *parent = surface->sub.parent;
- return meta_wayland_surface_is_effectively_synchronized (parent);
+ if (parent)
+ return meta_wayland_surface_is_effectively_synchronized (parent);
+
+ return TRUE;
}
}
}