# HG changeset patch # User Richard M. Stallman # Date 916078171 0 # Node ID 19ff7845d5f7831703081d8975f9c19a2e243c4b # Parent 551467b8a092b82d1e98ff70b5526262e960860c (find_handler_clause): If SIG is nil (memory full error), never run the debugger, and don't bother checking the args to see whether the debugger should be run. diff -r 551467b8a092 -r 19ff7845d5f7 src/eval.c --- a/src/eval.c Mon Jan 11 17:37:34 1999 +0000 +++ b/src/eval.c Mon Jan 11 18:09:31 1999 +0000 @@ -1212,6 +1212,8 @@ DATA should be a list. Its elements are printed as part of the error message.\n\ If the signal is handled, DATA is made available to the handler.\n\ See also the function `condition-case'.") + /* When memory is full, ERROR-SYMBOL is nil, + and DATA is (REAL-ERROR-SYMBOL . REAL-DATA). */ (error_symbol, data) Lisp_Object error_symbol, data; { @@ -1361,8 +1363,9 @@ /* Value of Qlambda means we have called debugger and user has continued. There are two ways to pass SIG and DATA: - - SIG is the error symbol, and DATA is the rest of the data. + = SIG is the error symbol, and DATA is the rest of the data. = SIG is nil, and DATA is (SYMBOL . REST-OF-DATA). + This is for memory-full errors only. Store value returned from debugger into *DEBUGGER_VALUE_PTR. */ @@ -1385,11 +1388,16 @@ int count = specpdl_ptr - specpdl; int debugger_called = 0; Lisp_Object sig_symbol, combined_data; + /* This is set to 1 if we are handling a memory-full error, + because these must not run the debugger. + (There is no room in memory to do that!) */ + int no_debugger = 0; if (NILP (sig)) { combined_data = data; sig_symbol = Fcar (data); + no_debugger = 1; } else { @@ -1408,9 +1416,10 @@ Fbacktrace, Qnil); #endif } - if ((EQ (sig_symbol, Qquit) - ? debug_on_quit - : wants_debugger (Vdebug_on_error, conditions)) + if (! no_debugger + && (EQ (sig_symbol, Qquit) + ? debug_on_quit + : wants_debugger (Vdebug_on_error, conditions)) && ! skip_debugger (conditions, combined_data) && when_entered_debugger < num_nonmacro_input_events) {