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 | 68fb56eb803283f7df9caf2d47c0d39e7be95cbb (patch) | |
tree | dd473a0ae57e68589de94e267a898b7d299e6226 /coverage/ctracer/datastack.c | |
parent | 0c38af32a0cada8d35671adff86c871d3badb37a (diff) | |
download | python-coveragepy-git-68fb56eb803283f7df9caf2d47c0d39e7be95cbb.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 5a384e6b..515ba924 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; } |