summaryrefslogtreecommitdiffstats
path: root/metacity-2.28-xioerror-unknown-display.patch
diff options
context:
space:
mode:
Diffstat (limited to 'metacity-2.28-xioerror-unknown-display.patch')
-rw-r--r--metacity-2.28-xioerror-unknown-display.patch58
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
+