diff options
-rw-r--r-- | src/ChangeLog | 3 | ||||
-rw-r--r-- | src/eval.c | 8 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index f65319c9fe..fef7cf0e47 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -8,6 +8,9 @@ * cmds.c (Fself_insert_command): Respect the width of EMACS_INT and avoid warning. + * eval.c (call_debugger): When exiting the debugger, do not allow + max_specpdl_size less than actual binding depth (Bug#16603). + (syms_of_eval): Adjust docstring. 2014-02-09 Lars Ingebrigtsen <larsi@gnus.org> diff --git a/src/eval.c b/src/eval.c index da68a3014d..a96d413d09 100644 --- a/src/eval.c +++ b/src/eval.c @@ -283,7 +283,9 @@ call_debugger (Lisp_Object arg) bool debug_while_redisplaying; ptrdiff_t count = SPECPDL_INDEX (); Lisp_Object val; - EMACS_INT old_max = max_specpdl_size, old_depth = max_lisp_eval_depth; + EMACS_INT old_depth = max_lisp_eval_depth; + /* Do not allow max_specpdl_size less than actual depth (Bug#16603). */ + EMACS_INT old_max = max (max_specpdl_size, count); if (lisp_eval_depth + 40 > max_lisp_eval_depth) max_lisp_eval_depth = lisp_eval_depth + 40; @@ -3721,7 +3723,9 @@ If Lisp code tries to increase the total number past this amount, an error is signaled. You can safely use a value considerably larger than the default value, if that proves inconveniently small. However, if you increase it too far, -Emacs could run out of memory trying to make the stack bigger. */); +Emacs could run out of memory trying to make the stack bigger. +Note that this limit may be silently increased by the debugger +if `debug-on-error' or `debug-on-quit' is set. */); DEFVAR_INT ("max-lisp-eval-depth", max_lisp_eval_depth, doc: /* Limit on depth in `eval', `apply' and `funcall' before error. |