From 8cc45af919dc56011dbf4c8965b9c1e4784e56d7 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Fri, 30 Aug 2019 10:42:50 -0400 Subject: In .developing mode, define MEMDEBUG to use malloc/free for block allocation to facilitate finding memory leaks. --- awk.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 363e4403..345d87b3 100644 --- a/awk.h +++ b/awk.h @@ -1061,6 +1061,9 @@ struct block_item { struct block_header { struct block_item *freep; size_t size; +#ifdef MEMDEBUG + long cnt; +#endif }; enum block_id { @@ -1323,12 +1326,23 @@ DEREF(NODE *r) #define get_lhs(n, r) (n)->type == Node_var && ! var_uninitialized(n) ? \ &((n)->var_value) : r_get_lhs((n), (r)) +#ifdef MEMDEBUG + +extern void *r_getblock(int id); +extern void r_freeblock(void *, int id); +#define getblock(p, id, ty) (void) (p = r_getblock(id)) +#define freeblock(p, id) (void) (r_freeblock(p, id)) + +#else /* MEMDEBUG */ + #define getblock(p, id, ty) (void) ((p = (ty) nextfree[id].freep) ? \ (ty) (nextfree[id].freep = ((struct block_item *) p)->freep) \ : (p = (ty) more_blocks(id))) #define freeblock(p, id) (void) (((struct block_item *) p)->freep = nextfree[id].freep, \ nextfree[id].freep = (struct block_item *) p) +#endif /* MEMDEBUG */ + #define getnode(n) getblock(n, BLOCK_NODE, NODE *) #define freenode(n) freeblock(n, BLOCK_NODE) -- cgit v1.2.3