[mutter/gnome-3-28] xwayland: Don't abort if Xwayland crashes



commit 25c7e52ada781a5165370b0c4558560466f60a71
Author: Ray Strode <rstrode redhat com>
Date:   Thu Apr 12 14:06:01 2018 -0400

    xwayland: Don't abort if Xwayland crashes
    
    Right now if Xwayland crashes, we crash, too.
    
    On some level that makes sense, since we're supposed to control the
    lifecycle of Xwayland, and by it crashing we've lost that control.
    
    But practically speaking, the knock-on crash adds noise to the logs,
    bug trackers, and retrace servers that only makes debugging harder.
    And the crash isn't something mutter can "fix", since it's
    ultimately from a bug in Xwayland anyway.
    
    This commit makes mutter exit instead of crash if Xwayland goes away
    unexpectedly.
    
    
    (cherry picked from commit 2d80fd02e76bbe17dc52072299dda92ab88c99c0)

 src/wayland/meta-xwayland.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)
---
diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c
index 774997611..c3baaff05 100644
--- a/src/wayland/meta-xwayland.c
+++ b/src/wayland/meta-xwayland.c
@@ -26,6 +26,8 @@
 #include "meta-xwayland.h"
 #include "meta-xwayland-private.h"
 
+#include <meta/main.h>
+
 #include <glib.h>
 #include <glib-unix.h>
 #include <errno.h>
@@ -397,25 +399,30 @@ xserver_died (GObject      *source,
 
   if (!g_subprocess_wait_finish (proc, result, &error))
     {
-      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
-        g_error ("Failed to finish waiting for Xwayland: %s", error->message);
+      if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+        return;
+
+      g_warning ("Failed to finish waiting for Xwayland: %s", error->message);
     }
   else if (!g_subprocess_get_successful (proc))
-    g_error ("X Wayland crashed; aborting");
+    g_warning ("X Wayland crashed; exiting");
   else
     {
       /* For now we simply abort if we see the server exit.
        *
        * In the future X will only be loaded lazily for legacy X support
        * but for now it's a hard requirement. */
-      g_error ("Spurious exit of X Wayland server");
+      g_warning ("Spurious exit of X Wayland server");
     }
+
+  meta_exit (META_EXIT_ERROR);
 }
 
 static int
 x_io_error (Display *display)
 {
-  g_error ("Connection to xwayland lost");
+  g_warning ("Connection to xwayland lost");
+  meta_exit (META_EXIT_ERROR);
 
   return 0;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]