From 84bffd41af63cdc900cbe40bde10df44f242c671 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 18 Apr 2016 18:39:20 -0600 Subject: [PATCH] GC: fix backtrace reporting The addition ot limited recursive marking broke the implementation of memory-debugging backtraces. --- racket/src/racket/gc2/newgc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/racket/src/racket/gc2/newgc.c b/racket/src/racket/gc2/newgc.c index 035314da05..fcc7f31392 100644 --- a/racket/src/racket/gc2/newgc.c +++ b/racket/src/racket/gc2/newgc.c @@ -3223,11 +3223,17 @@ static void promote_marked_gen0_big_page(NewGC *gc, mpage *page) { #endif } +#ifdef MZ_GC_BACKTRACE +# define BACKTRACE_DISABLES_RECUR 1 +#else +# define BACKTRACE_DISABLES_RECUR 0 +#endif + static void mark_recur_or_push_ptr(struct NewGC *gc, void *p, int is_a_master_page, int inc_gen1) { objhead *ohead = OBJPTR_TO_OBJHEAD(p); - if ((gc->mark_depth < MAX_RECUR_MARK_DEPTH) && !is_a_master_page && !inc_gen1) { + if ((gc->mark_depth < MAX_RECUR_MARK_DEPTH) && !is_a_master_page && !inc_gen1 && !BACKTRACE_DISABLES_RECUR) { switch (ohead->type) { case PAGE_TAGGED: {