diff options
author | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2019-08-30 10:42:50 -0400 |
---|---|---|
committer | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2019-08-30 10:42:50 -0400 |
commit | 8cc45af919dc56011dbf4c8965b9c1e4784e56d7 (patch) | |
tree | e271f42fbc3de7ce1f1e477e700d769bde2fcca4 /awk.h | |
parent | c15d2db3ce7ea49741d8792190f9212842db86ec (diff) | |
download | egawk-8cc45af919dc56011dbf4c8965b9c1e4784e56d7.tar.gz egawk-8cc45af919dc56011dbf4c8965b9c1e4784e56d7.tar.bz2 egawk-8cc45af919dc56011dbf4c8965b9c1e4784e56d7.zip |
In .developing mode, define MEMDEBUG to use malloc/free for block allocation to facilitate finding memory leaks.
Diffstat (limited to 'awk.h')
-rw-r--r-- | awk.h | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -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) |