diff options
author | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2019-09-10 09:43:04 -0400 |
---|---|---|
committer | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2019-09-10 09:43:04 -0400 |
commit | 7c3ad2bf3d4c5cac82146b3359134137bc6d83ff (patch) | |
tree | 7831287ee49e8e9ee12b22887c409fd3620fc391 /builtin.c | |
parent | abc7fc68f8ce227db5a1ce881a8f065577c764dd (diff) | |
download | egawk-7c3ad2bf3d4c5cac82146b3359134137bc6d83ff.tar.gz egawk-7c3ad2bf3d4c5cac82146b3359134137bc6d83ff.tar.bz2 egawk-7c3ad2bf3d4c5cac82146b3359134137bc6d83ff.zip |
Update the typeof(PROCINFO) hack to return memory highwater and active counts.
Diffstat (limited to 'builtin.c')
-rw-r--r-- | builtin.c | 33 |
1 files changed, 29 insertions, 4 deletions
@@ -4055,10 +4055,35 @@ do_typeof(int nargs) int i; for (i = 0; i < BLOCK_MAX; i++) { char *p; - size_t l = 6 + strlen(nextfree[i].name); - emalloc(p, char *, l+1, "do_typeof"); - sprintf(p, "count_%s", nextfree[i].name); - assoc_set(dbg, make_str_node(p, l, ALREADY_MALLOCED), make_number((AWKNUM) (nextfree[i].cnt))); + size_t nl = strlen(nextfree[i].name); + /* + * save values before we create new + * array elements so that we have a + * snapshot at a consistent moment in + * time + */ + long hw = nextfree[i].highwater; + long active; +#ifdef MEMDEBUG + active = nextfree[i].active; +#else + active = hw; + { + struct block_item *ip; + for (ip = nextfree[i].freep; ip; ip = ip->freep) + active--; + } +#endif + +#define SETVAL(X, V) { \ + size_t l = nl + sizeof(#X); \ + emalloc(p, char *, l+1, "do_typeof"); \ + sprintf(p, "%s_" #X, nextfree[i].name); \ + assoc_set(dbg, make_str_node(p, l, ALREADY_MALLOCED), make_number((AWKNUM) (V))); \ +} + SETVAL(highwater, hw) + SETVAL(active, active) +#undef SETVAL } } } |