# HG changeset patch # User Richard M. Stallman # Date 1142090371 0 # Node ID 2a8938fd785ed439c096f47226a71aaac8dfd128 # Parent 2e9fdd693b3ff3fcc6b52992325a7c7ca1a8dc05 (unwind_to_catch): Call x_fully_uncatch_errors. (internal_condition_case_1, internal_condition_case_2): Abort if within unclosed x_catch_errors. diff -r 2e9fdd693b3f -r 2a8938fd785e src/eval.c --- 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;