From bcb61d60fce18f87184d3098103d82bd118d859d Mon Sep 17 00:00:00 2001 From: Karl Heuer Date: Mon, 28 Feb 1994 20:20:22 +0000 Subject: [PATCH] (memory_full): Use new variable memory_signal_data with precomputed value instead of trying to build it after memory is already exhausted. --- src/alloc.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/alloc.c b/src/alloc.c index f7544ab0b7..f19ca3fb24 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -98,6 +98,9 @@ int pureptr; /* 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 @@ display_malloc_warning () /* 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 @@ The size is counted as the number of bytes occupied,\n\ 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); -- 2.20.1