mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-05 11:21:04 -08:00
(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.
This commit is contained in:
parent
8671340582
commit
c33188d937
1 changed files with 7 additions and 10 deletions
17
src/lisp.h
17
src/lisp.h
|
|
@ -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 */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue