From 9ef4be8b41c7d256908ba319918c0f7d54346bf4 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Fri, 8 Dec 2017 00:10:44 +0200 Subject: [PATCH] py/gc: Add CLEAR_ON_SWEEP option to debug mis-traced objects. Accessing them will crash immediately instead still working for some time, until overwritten by some other data, leading to much less deterministic crashes. --- py/gc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/py/gc.c b/py/gc.c index 172a5e8fc0..9a3c57e619 100644 --- a/py/gc.c +++ b/py/gc.c @@ -44,6 +44,10 @@ // make this 1 to dump the heap each time it changes #define EXTENSIVE_HEAP_PROFILING (0) +// make this 1 to zero out swept memory to more eagerly +// detect untraced object still in use +#define CLEAR_ON_SWEEP (0) + #define WORDS_PER_BLOCK ((MICROPY_BYTES_PER_GC_BLOCK) / BYTES_PER_WORD) #define BYTES_PER_BLOCK (MICROPY_BYTES_PER_GC_BLOCK) @@ -286,6 +290,9 @@ STATIC void gc_sweep(void) { case AT_TAIL: if (free_tail) { ATB_ANY_TO_FREE(block); + #if CLEAR_ON_SWEEP + memset((void*)PTR_FROM_BLOCK(block), 0, BYTES_PER_BLOCK); + #endif } break;