xwayland: Handle the died callback being cancelled more gracefully
If we were cancelled, it could mean we teared down, meaning fetching manager instances will attempt to fetch past freed instances. Handle this by waiting with the fetching until we know we weren't cancelled. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2140>
This commit is contained in:
parent
ad0d70d5d5
commit
29141afd0f
@ -536,14 +536,12 @@ xserver_died (GObject *source,
|
|||||||
GAsyncResult *result,
|
GAsyncResult *result,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
|
MetaWaylandCompositor *compositor;
|
||||||
GSubprocess *proc = G_SUBPROCESS (source);
|
GSubprocess *proc = G_SUBPROCESS (source);
|
||||||
MetaDisplay *display = meta_get_display ();
|
MetaDisplay *display = meta_get_display ();
|
||||||
g_autoptr (GError) error = NULL;
|
g_autoptr (GError) error = NULL;
|
||||||
MetaX11DisplayPolicy x11_display_policy;
|
MetaX11DisplayPolicy x11_display_policy;
|
||||||
|
|
||||||
x11_display_policy =
|
|
||||||
meta_context_get_x11_display_policy (compositor->context);
|
|
||||||
if (!g_subprocess_wait_finish (proc, result, &error))
|
if (!g_subprocess_wait_finish (proc, result, &error))
|
||||||
{
|
{
|
||||||
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||||
@ -551,7 +549,11 @@ xserver_died (GObject *source,
|
|||||||
|
|
||||||
g_warning ("Failed to finish waiting for Xwayland: %s", error->message);
|
g_warning ("Failed to finish waiting for Xwayland: %s", error->message);
|
||||||
}
|
}
|
||||||
else if (!g_subprocess_get_successful (proc))
|
|
||||||
|
compositor = meta_wayland_compositor_get_default ();
|
||||||
|
x11_display_policy =
|
||||||
|
meta_context_get_x11_display_policy (compositor->context);
|
||||||
|
if (!g_subprocess_get_successful (proc))
|
||||||
{
|
{
|
||||||
if (x11_display_policy == META_X11_DISPLAY_POLICY_MANDATORY)
|
if (x11_display_policy == META_X11_DISPLAY_POLICY_MANDATORY)
|
||||||
g_warning ("X Wayland crashed; exiting");
|
g_warning ("X Wayland crashed; exiting");
|
||||||
|
Loading…
Reference in New Issue
Block a user