summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ChangeLog3
-rw-r--r--src/eval.c8
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.