changeset 56198:a803de48faef

(SAFE_ALLOCA_LISP): New macro to allocate Lisp_Objects. Temporarily inhibits GC if memory is xmalloc'ed, as the Lisp_Objects in that memory area are unknown to GC. Add comments.
author Kim F. Storm <storm@cua.dk>
date Mon, 21 Jun 2004 22:35:29 +0000
parents fb8588385aac
children c0ad262446d6
files src/lisp.h
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lisp.h	Mon Jun 21 22:35:00 2004 +0000
+++ b/src/lisp.h	Mon Jun 21 22:35:29 2004 +0000
@@ -3256,6 +3256,8 @@
 #define USE_SAFE_ALLOCA			\
   int sa_count = SPECPDL_INDEX ()
 
+/* SAFE_ALLOCA allocates a simple buffer.  */
+
 #define SAFE_ALLOCA(buf, type, size)			  \
   do {							  \
     if ((size) < MAX_ALLOCA)				  \
@@ -3268,6 +3270,24 @@
       }							  \
   } while (0)
 
+/* SAFE_ALLOCA_LISP allocates an array of Lisp_Objects.
+   Temporarily inhibits GC since that array is unknow to GC.  */
+
+#define SAFE_ALLOCA_LISP(buf, size)			  \
+  do {							  \
+    if ((size) < MAX_ALLOCA)				  \
+      buf = (Lisp_Object *) alloca (size);		  \
+    else						  \
+      {							  \
+	buf = (Lisp_Object *) xmalloc (size);		  \
+	inhibit_garbage_collection();			  \
+	record_unwind_protect (safe_alloca_unwind,	  \
+			       make_save_value (buf, 0)); \
+      }							  \
+  } while (0)
+
+/* SAFE_FREE frees xmalloced memory and enables GC as needed.  */
+
 #define SAFE_FREE(size)			\
   do {					\
     if ((size) >= MAX_ALLOCA)		\