changeset 6116:64417bbbb128

(memory_full): Use new variable memory_signal_data with precomputed value instead of trying to build it after memory is already exhausted.
author Karl Heuer <kwzh@gnu.org>
date Mon, 28 Feb 1994 20:20:22 +0000
parents e3d6c30a3906
children 5366b606f90d
files src/alloc.c
diffstat 1 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/alloc.c	Mon Feb 28 13:03:13 1994 +0000
+++ b/src/alloc.c	Mon Feb 28 20:20:22 1994 +0000
@@ -98,6 +98,9 @@
 /* If nonzero, this is a warning delivered by malloc and not yet displayed.  */
 char *pending_malloc_warning;
 
+/* Pre-computed signal argument for use when memory is exhausted.  */
+static Lisp_Object memory_signal_data;
+
 /* Maximum amount of C stack to save when a GC happens.  */
 
 #ifndef MAX_SAVE_STACK
@@ -148,7 +151,10 @@
 /* Called if malloc returns zero */
 memory_full ()
 {
-  error ("Memory exhausted");
+  /* This used to call error, but if we've run out of memory, we could get
+     infinite recursion trying to build the string.  */
+  while (1)
+    Fsignal (Qerror, memory_signal_data);
 }
 
 /* like malloc routines but check for no memory and block interrupt input.  */
@@ -2216,6 +2222,11 @@
 which includes both saved text and other data.");
   undo_strong_limit = 30000;
 
+  /* We build this in advance because if we wait until we need it, we might
+     not be able to allocate the memory to hold it.  */
+  memory_signal_data = Fcons (build_string ("Memory exhausted"), Qnil);
+  staticpro (&memory_signal_data);
+
   defsubr (&Scons);
   defsubr (&Slist);
   defsubr (&Svector);