]> git.eshelyaron.com Git - emacs.git/commitdiff
(USE_SAFE_ALLOCA): Add and init sa_must_free integer.
authorKim F. Storm <storm@cua.dk>
Tue, 26 Oct 2004 22:37:02 +0000 (22:37 +0000)
committerKim F. Storm <storm@cua.dk>
Tue, 26 Oct 2004 22:37:02 +0000 (22:37 +0000)
(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.

src/lisp.h

index 9e39a0d3a8c70b45eb5e4aacf34331aae4ebf8c2..49d6fa9219d38f6554dcf3121d0ba4c4110204cd 100644 (file)
@@ -3263,7 +3263,7 @@ extern Lisp_Object Vdirectory_sep_char;
 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 @@ extern Lisp_Object safe_alloca_unwind (Lisp_Object);
     else                                                 \
       {                                                          \
        buf = (type) xmalloc (size);                      \
+       sa_must_free++;                                   \
        record_unwind_protect (safe_alloca_unwind,        \
                               make_save_value (buf, 0)); \
       }                                                          \
@@ -3281,10 +3282,12 @@ extern Lisp_Object safe_alloca_unwind (Lisp_Object);
 
 /* 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 @@ extern Lisp_Object safe_alloca_unwind (Lisp_Object);
        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 */