diff src/lisp.h @ 57724:80393689541a

(USE_SAFE_ALLOCA): Add and init sa_must_free integer. (SAFE_ALLOCA, SAFE_ALLOCA_LISP): Increment it when malloc is used. (SAFE_FREE): Test it to determine if we need to unwind to free. Remove size arg. All users changed. (SAFE_FREE_LISP) Remove. All users changed to use SAFE_FREE.
author Kim F. Storm <storm@cua.dk>
date Tue, 26 Oct 2004 22:37:02 +0000
parents e624ae20de7c
children c955f6add62a 4056279af756 3a5b83e18d41
line wrap: on
line diff
--- a/src/lisp.h	Tue Oct 26 22:33:43 2004 +0000
+++ b/src/lisp.h	Tue Oct 26 22:37:02 2004 +0000
@@ -3263,7 +3263,7 @@
 extern Lisp_Object safe_alloca_unwind (Lisp_Object);
 
 #define USE_SAFE_ALLOCA			\
-  int sa_count = SPECPDL_INDEX ()
+  int sa_count = SPECPDL_INDEX (), sa_must_free = 0
 
 /* SAFE_ALLOCA allocates a simple buffer.  */
 
@@ -3274,6 +3274,7 @@
     else						  \
       {							  \
 	buf = (type) xmalloc (size);			  \
+	sa_must_free++;					  \
 	record_unwind_protect (safe_alloca_unwind,	  \
 			       make_save_value (buf, 0)); \
       }							  \
@@ -3281,10 +3282,12 @@
 
 /* SAFE_FREE frees xmalloced memory and enables GC as needed.  */
 
-#define SAFE_FREE(size)			\
+#define SAFE_FREE()			\
   do {					\
-    if ((size) >= MAX_ALLOCA)		\
+    if (sa_must_free) {			\
+      sa_must_free = 0;			\
       unbind_to (sa_count, Qnil);	\
+    }					\
   } while (0)
 
 
@@ -3301,17 +3304,11 @@
 	buf = (Lisp_Object *) xmalloc (size_);		  \
 	arg_ = make_save_value (buf, nelt);		  \
 	XSAVE_VALUE (arg_)->dogc = 1;			  \
+	sa_must_free++;					  \
 	record_unwind_protect (safe_alloca_unwind, arg_); \
       }							  \
   } while (0)
 
-#define SAFE_FREE_LISP(nelt)				\
-  do {							\
-    if (((nelt) * sizeof (Lisp_Object)) >= MAX_ALLOCA)	\
-      unbind_to (sa_count, Qnil);			\
-  } while (0)
-
-
 
 #endif /* EMACS_LISP_H */