Commit 14e38da1 authored by Owen W. Taylor's avatar Owen W. Taylor

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
parent 1592738d
......@@ -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 */
}
}
......
......@@ -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 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment