# HG changeset patch
# User james
# Date 1079373700 0
# Node ID 31d5f86eb303e6215e5f15364dda766da0364ed4
# Parent  b5691d548489e96798daa3c6de568d05585dd7a0
[xemacs-hg @ 2004-03-15 18:01:37 by james]
Break infinite loop when out of specpdl space.

diff -r b5691d548489 -r 31d5f86eb303 src/ChangeLog
--- a/src/ChangeLog	Sun Mar 14 22:50:33 2004 +0000
+++ b/src/ChangeLog	Mon Mar 15 18:01:40 2004 +0000
@@ -1,3 +1,8 @@
+2004-03-15  Jerry James  <james@xemacs.org>
+
+	* eval.c (grow_specpdl): Add some specpdl space, even when not
+	debug-on-error or debug-on-signal.
+
 2004-03-08  Lutz Euler  <lutz.euler@freenet.de>
 
 	* lstream.c (Lstream_pseudo_close): Fix test for LSTREAM_FL_IS_OPEN.
diff -r b5691d548489 -r 31d5f86eb303 src/eval.c
--- a/src/eval.c	Sun Mar 14 22:50:33 2004 +0000
+++ b/src/eval.c	Mon Mar 15 18:01:40 2004 +0000
@@ -5707,10 +5707,14 @@
 	max_specpdl_size = min_max_specpdl_size;
       if (size_needed >= max_specpdl_size)
 	{
-	  if (!NILP (Vdebug_on_error) ||
-	      !NILP (Vdebug_on_signal))
-	    /* Leave room for some specpdl in the debugger.  */
-	    max_specpdl_size = size_needed + 100;
+	  /* Leave room for some specpdl in the debugger. */
+	  max_specpdl_size = size_needed + 100;
+	  if (max_specpdl_size > specpdl_size)
+	    {
+	      specpdl_size = max_specpdl_size;
+	      XREALLOC_ARRAY (specpdl, struct specbinding, specpdl_size);
+	      specpdl_ptr = specpdl + specpdl_depth();
+	    }
 	  signal_continuable_error
 	    (Qstack_overflow,
 	     "Variable binding depth exceeds max-specpdl-size", Qunbound);