summaryrefslogtreecommitdiff
path: root/src/wayland/meta-xwayland.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wayland/meta-xwayland.c')
-rw-r--r--src/wayland/meta-xwayland.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c
index 88a04e5a2..f3dd19260 100644
--- a/src/wayland/meta-xwayland.c
+++ b/src/wayland/meta-xwayland.c
@@ -334,6 +334,20 @@ x_io_error (Display *display)
return 0;
}
+#ifdef HAVE_XSETIOERROREXITHANDLER
+static void
+x_io_error_exit (Display *display,
+ MetaX11Display *x11_display)
+{
+ MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
+ MetaXWaylandManager *manager = &compositor->xwayland_manager;
+
+ g_warning ("Xwayland just died, attempting to recover");
+ manager->xserver_grace_period_id =
+ g_idle_add (shutdown_xwayland_cb, manager);
+}
+#endif
+
void
meta_xwayland_override_display_number (int number)
{
@@ -795,6 +809,9 @@ meta_xwayland_complete_init (MetaDisplay *display,
we won't reset the tty).
*/
XSetIOErrorHandler (x_io_error);
+#ifdef HAVE_XSETIOERROREXITHANDLER
+ XSetIOErrorExitHandler (xdisplay, x_io_error_exit, display);
+#endif
g_signal_connect (display, "x11-display-closing",
G_CALLBACK (on_x11_display_closing), NULL);