diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2017-03-03 06:56:21 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2017-03-03 06:56:21 -0500 |
commit | 31c8dbfcf45cd6bbb0f7d47c5b0e69d5948c122c (patch) | |
tree | e665beaeefee3fea44d380e38274f7b379a203ea /coverage/ctracer/datastack.c | |
parent | 65a9b1a16c9b1c38e890213ff7008416cc915158 (diff) | |
download | python-coveragepy-31c8dbfcf45cd6bbb0f7d47c5b0e69d5948c122c.tar.gz |
Simplify stack management in CTracer
"file_data" used to be borrowed from data, but that was confusing. Now it's
owned. We used to have a struct member which was a copy of the current stack
entry. That just made it harder to reason about reference counting. Now we
have a pointer to the entry on the stack.
Diffstat (limited to 'coverage/ctracer/datastack.c')
-rw-r--r-- | coverage/ctracer/datastack.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/coverage/ctracer/datastack.c b/coverage/ctracer/datastack.c index 5a384e6..515ba92 100644 --- a/coverage/ctracer/datastack.c +++ b/coverage/ctracer/datastack.c @@ -4,7 +4,7 @@ #include "util.h" #include "datastack.h" -#define STACK_DELTA 100 +#define STACK_DELTA 20 int DataStack_init(Stats *pstats, DataStack *pdata_stack) @@ -18,6 +18,11 @@ DataStack_init(Stats *pstats, DataStack *pdata_stack) void DataStack_dealloc(Stats *pstats, DataStack *pdata_stack) { + int i; + + for (i = 0; i < pdata_stack->alloc; i++) { + Py_XDECREF(pdata_stack->stack[i].file_data); + } PyMem_Free(pdata_stack->stack); } @@ -35,6 +40,9 @@ DataStack_grow(Stats *pstats, DataStack *pdata_stack) pdata_stack->depth--; return RET_ERROR; } + /* Zero the new entries. */ + memset(bigger_data_stack + pdata_stack->alloc, 0, STACK_DELTA * sizeof(DataStackEntry)); + pdata_stack->stack = bigger_data_stack; pdata_stack->alloc = bigger; } |