diff options
Diffstat (limited to 'metacity-2.28-xioerror-unknown-display.patch')
-rw-r--r-- | metacity-2.28-xioerror-unknown-display.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/metacity-2.28-xioerror-unknown-display.patch b/metacity-2.28-xioerror-unknown-display.patch new file mode 100644 index 0000000..2c29cd5 --- /dev/null +++ b/metacity-2.28-xioerror-unknown-display.patch @@ -0,0 +1,58 @@ +From 7c30ba2d034050e8e7d1776ea7541495bdf898b3 Mon Sep 17 00:00:00 2001 +From: Owen W. Taylor <otaylor@fishsoup.net> +Date: Fri, 20 Nov 2009 10:42:07 -0500 +Subject: [PATCH] Handle XError and XIOError for unknown displays + +The atk-bridge GTK+ module opens its own display; if we get an +XIOError on that display, we shouldn't abort with a meta_bug() +but just exit normally. Also fix a segfault if we got an XError +for that display. +--- + src/core/errors.c | 13 +++++-------- + 1 files changed, 5 insertions(+), 8 deletions(-) + +diff --git a/src/core/errors.c b/src/core/errors.c +index 8de4608..59f9c71 100644 +--- a/src/core/errors.c ++++ b/src/core/errors.c +@@ -222,10 +222,10 @@ x_error_handler (Display *xdisplay, + + display = meta_display_for_x_display (xdisplay); + +- /* Display can be NULL here because the compositing manager +- * has its own Display, but Xlib only has one global error handler ++ /* Display can be NULL here Xlib only has one global error handler; and ++ * there might be other displays open in the process. + */ +- if (display->error_traps > 0) ++ if (display && display->error_traps > 0) + { + /* we're in an error trap, chain to the trap handler + * saved from GDK +@@ -264,21 +264,18 @@ x_io_error_handler (Display *xdisplay) + + display = meta_display_for_x_display (xdisplay); + +- if (display == NULL) +- meta_bug ("IO error received for unknown display?\n"); +- + if (errno == EPIPE) + { + meta_warning (_("Lost connection to the display '%s';\n" + "most likely the X server was shut down or you killed/destroyed\n" + "the window manager.\n"), +- display->name); ++ display ? display->name : DisplayString (xdisplay)); + } + else + { + meta_warning (_("Fatal IO error %d (%s) on display '%s'.\n"), + errno, g_strerror (errno), +- display->name); ++ display ? display->name : DisplayString (xdisplay)); + } + + /* Xlib would force an exit anyhow */ +-- +1.6.5.2 + |