]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix x_catch_errors-related abort after X disconnects. (Reported by Dan Nicolaescu).
authorKaroly Lorentey <lorentey@elte.hu>
Sat, 29 Jul 2006 18:41:57 +0000 (18:41 +0000)
committerKaroly Lorentey <lorentey@elte.hu>
Sat, 29 Jul 2006 18:41:57 +0000 (18:41 +0000)
* src/xterm.h: Remove declaration for x_fully_uncatch_errors.

* src/xterm.c (x_fully_uncatch_errors): Disable definition.

* src/eval.c (unwind_to_catch): Don't call x_fully_uncatch_errors.
  (internal_condition_case, internal_condition_case_1)
  (internal_condition_case_2): Don't abort when x_catching_errors.

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-576

src/eval.c
src/xterm.c
src/xterm.h

index 0d7a6a310383de3b20f56a049952df2ab6fd51a5..c8ad9004c44797629568bbb0036ff3a76040041e 100644 (file)
@@ -1261,7 +1261,11 @@ unwind_to_catch (catch, value)
 #if HAVE_X_WINDOWS
   /* If x_catch_errors was done, turn it off now.
      (First we give unbind_to a chance to do that.)  */
+#if 0 /* This would disable x_catch_errors after x_connection_closed.
+       * The catch must remain in effect during that delicate
+       * state. --lorentey  */
   x_fully_uncatch_errors ();
+#endif
 #endif
 
   byte_stack_list = catch->byte_stack;
@@ -1439,9 +1443,11 @@ internal_condition_case (bfun, handlers, hfun)
 
   /* Since Fsignal will close off all calls to x_catch_errors,
      we will get the wrong results if some are not closed now.  */
+#if 0 /* Fsignal doesn't do that anymore.  --lorentey  */
 #if HAVE_X_WINDOWS
   if (x_catching_errors ())
     abort ();
+#endif
 #endif
 
   c.tag = Qnil;
@@ -1487,9 +1493,11 @@ internal_condition_case_1 (bfun, arg, handlers, hfun)
 
   /* Since Fsignal will close off all calls to x_catch_errors,
      we will get the wrong results if some are not closed now.  */
+#if 0 /* Fsignal doesn't do that anymore.  --lorentey  */
 #if HAVE_X_WINDOWS
   if (x_catching_errors ())
     abort ();
+#endif
 #endif
 
   c.tag = Qnil;
@@ -1538,9 +1546,11 @@ internal_condition_case_2 (bfun, nargs, args, handlers, hfun)
 
   /* Since Fsignal will close off all calls to x_catch_errors,
      we will get the wrong results if some are not closed now.  */
+#if 0 /* Fsignal doesn't do that anymore.  --lorentey  */
 #if HAVE_X_WINDOWS
   if (x_catching_errors ())
     abort ();
+#endif
 #endif
 
   c.tag = Qnil;
index 9c0b25b08bfed6ea82a5e433b2b410694125e589..5df7896a2b34ed4c7e020206d4e83c93ca03cd7f 100644 (file)
@@ -7615,6 +7615,8 @@ x_clear_errors (dpy)
   x_error_message->string[0] = 0;
 }
 
+#if 0 /* See comment in unwind_to_catch why calling this is a bad
+       * idea.  --lorentey   */
 /* Close off all unclosed x_catch_errors calls.  */
 
 void
@@ -7623,6 +7625,7 @@ x_fully_uncatch_errors ()
   while (x_error_message)
     x_uncatch_errors ();
 }
+#endif
 
 /* Nonzero if x_catch_errors has been done and not yet canceled.  */
 
index 4580f3c0744ee2a80edf9efbdc34fb2ba7dd8f11..6bbcdc6389da4c2d08b7b2c8bb2c2d077ddd49a8 100644 (file)
@@ -975,7 +975,6 @@ extern int x_had_errors_p P_ ((Display *));
 extern int x_catching_errors P_ ((void));
 extern void x_uncatch_errors P_ ((void));
 extern void x_clear_errors P_ ((Display *));
-extern void x_fully_uncatch_errors P_ ((void));
 extern void x_set_window_size P_ ((struct frame *, int, int, int));
 extern void x_set_mouse_position P_ ((struct frame *, int, int));
 extern void x_set_mouse_pixel_position P_ ((struct frame *, int, int));