[gtk+] Only store error codes in inner-most X error trap
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Only store error codes in inner-most X error trap
- Date: Mon, 20 Sep 2010 20:36:40 +0000 (UTC)
commit 14e38da150516ffe5cece04de16fb3c976caa21f
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Mon Sep 20 16:12:11 2010 -0400
Only store error codes in inner-most X error trap
When an error occurs with nested traps in place, only the innermost
trap should have the error code stored in it; outer traps are
shielded by the inner trap.
https://bugzilla.gnome.org/show_bug.cgi?id=629608
gdk/x11/gdkdisplay-x11.c | 1 +
tests/testerrors.c | 11 ++++++++++-
2 files changed, 11 insertions(+), 1 deletions(-)
---
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index 3b82590..3986290 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -2721,6 +2721,7 @@ _gdk_x11_display_error_event (GdkDisplay *display,
{
ignore = TRUE;
trap->error_code = error->error_code;
+ break; /* only innermost trap gets the error code */
}
}
diff --git a/tests/testerrors.c b/tests/testerrors.c
index b8d1a8a..d371f1b 100755
--- a/tests/testerrors.c
+++ b/tests/testerrors.c
@@ -56,13 +56,22 @@ test_error_trapping (GdkDisplay *gdk_display)
XSync (d, TRUE);
- /* verify that we can catch with nested traps */
+ /* verify that we can catch with nested traps; inner-most
+ * active trap gets the error */
gdk_error_trap_push ();
gdk_error_trap_push ();
XSetCloseDownMode (d, 12345);
error = gdk_error_trap_pop ();
g_assert (error == BadValue);
error = gdk_error_trap_pop ();
+ g_assert (error == Success);
+
+ gdk_error_trap_push ();
+ XSetCloseDownMode (d, 12345);
+ gdk_error_trap_push ();
+ error = gdk_error_trap_pop ();
+ g_assert (error == Success);
+ error = gdk_error_trap_pop ();
g_assert (error == BadValue);
/* try nested, without sync */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]