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 52fdd24467)
This commit is contained in:
Olivier Fourdan 2018-05-03 09:17:24 +02:00 committed by Jonas Ådahl
parent a89baa44ab
commit ca0d56a3a4

View File

@ -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;
}
}
}