Commit a9e6bacc authored by Kim F. Storm's avatar Kim F. Storm
Browse files

(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.
parent 3d33d993
......@@ -3256,6 +3256,8 @@ extern Lisp_Object safe_alloca_unwind (Lisp_Object);
#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 @@ extern Lisp_Object safe_alloca_unwind (Lisp_Object);
} \
} 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) \
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment