From 06b4cf70c909a24bd3b1b454568dda772d58ea88 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 20 Jun 2007 02:22:30 +0000 Subject: [PATCH] 3m: fix zeroing out of weak-box secondary pointer when the secondary pointer has moved in the mark phase svn: r6704 --- src/mzscheme/gc2/compact.c | 1 + src/mzscheme/gc2/newgc.c | 2 ++ src/mzscheme/gc2/weak.c | 4 +++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/mzscheme/gc2/compact.c b/src/mzscheme/gc2/compact.c index 553fd05fd4..02af59738e 100644 --- a/src/mzscheme/gc2/compact.c +++ b/src/mzscheme/gc2/compact.c @@ -532,6 +532,7 @@ static int size_on_free_list(void *p) /******************************************************************************/ static int is_marked(void *p); +#define weak_box_resolve(p) (p) #include "weak.c" diff --git a/src/mzscheme/gc2/newgc.c b/src/mzscheme/gc2/newgc.c index 964ca995c9..3702a80bdd 100644 --- a/src/mzscheme/gc2/newgc.c +++ b/src/mzscheme/gc2/newgc.c @@ -1170,6 +1170,8 @@ static unsigned short ephemeron_tag; #define is_marked(p) marked(p) typedef short Type_Tag; +#define weak_box_resolve(p) GC_resolve(p) + #include "weak.c" /*****************************************************************************/ diff --git a/src/mzscheme/gc2/weak.c b/src/mzscheme/gc2/weak.c index 63394fab27..b7dbcf8649 100644 --- a/src/mzscheme/gc2/weak.c +++ b/src/mzscheme/gc2/weak.c @@ -223,7 +223,9 @@ static void zero_weak_boxes() if (!is_marked(wb->val)) { wb->val = NULL; if (wb->secondary_erase) { - *(wb->secondary_erase + wb->soffset) = NULL; + void **p; + p = (void **)GC_resolve(wb->secondary_erase); + *(p + wb->soffset) = NULL; wb->secondary_erase = NULL; } }