From 84ac2e417db189bedb8749be3d34287859c38f01 Mon Sep 17 00:00:00 2001 From: Joel Dice Date: Tue, 1 Sep 2009 18:32:21 -0600 Subject: [PATCH] follow reference pointer before using in in refrenceTargetUnreachable in case it points to a moved object --- src/machine.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/machine.cpp b/src/machine.cpp index 7f9f25cd90..34892a00d1 100644 --- a/src/machine.cpp +++ b/src/machine.cpp @@ -379,13 +379,15 @@ referenceTargetUnreachable(Thread* t, Heap::Visitor* v, object* p) void referenceUnreachable(Thread* t, Heap::Visitor* v, object* p) { + object r = static_cast(t->m->heap->follow(*p)); + if (DebugReferences) { fprintf(stderr, "reference %p unreachable (target %p)\n", - *p, jreferenceTarget(t, *p)); + *p, jreferenceTarget(t, r)); } - if (jreferenceQueue(t, *p) - and t->m->heap->status(jreferenceQueue(t, *p)) != Heap::Unreachable) + if (jreferenceQueue(t, r) + and t->m->heap->status(jreferenceQueue(t, r)) != Heap::Unreachable) { // queue is reachable - add the reference referenceTargetUnreachable(t, v, p);