changeset 69387:2a8938fd785e

(unwind_to_catch): Call x_fully_uncatch_errors. (internal_condition_case_1, internal_condition_case_2): Abort if within unclosed x_catch_errors.
author Richard M. Stallman <rms@gnu.org>
date Sat, 11 Mar 2006 15:19:31 +0000
parents 2e9fdd693b3f
children 1fe13d52e977
files src/eval.c
diffstat 1 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c	Sat Mar 11 15:13:47 2006 +0000
+++ b/src/eval.c	Sat Mar 11 15:19:31 2006 +0000
@@ -1259,6 +1259,10 @@
     }
   while (! last_time);
 
+  /* If x_catch_errors was done, turn it off now.
+     (First we give unbind_to a chance to do that.)  */
+  x_fully_uncatch_errors ();
+
   byte_stack_list = catch->byte_stack;
   gcprolist = catch->gcpro;
 #ifdef DEBUG_GCPRO
@@ -1435,10 +1439,10 @@
   struct catchtag c;
   struct handler h;
 
-#if 0 /* We now handle interrupt_input_blocked properly.
-	 What we still do not handle is exiting a signal handler.  */
+  /* Since Fsignal will close off all calls to x_catch_errors,
+     we will get the wrong results if some are not closed now.  */
+  if (x_catching_errors ())
     abort ();
-#endif
 
   c.tag = Qnil;
   c.val = Qnil;
@@ -1481,6 +1485,11 @@
   struct catchtag c;
   struct handler h;
 
+  /* Since Fsignal will close off all calls to x_catch_errors,
+     we will get the wrong results if some are not closed now.  */
+  if (x_catching_errors ())
+    abort ();
+
   c.tag = Qnil;
   c.val = Qnil;
   c.backlist = backtrace_list;
@@ -1525,6 +1534,11 @@
   struct catchtag c;
   struct handler h;
 
+  /* Since Fsignal will close off all calls to x_catch_errors,
+     we will get the wrong results if some are not closed now.  */
+  if (x_catching_errors ())
+    abort ();
+
   c.tag = Qnil;
   c.val = Qnil;
   c.backlist = backtrace_list;