follow reference pointer before using in in refrenceTargetUnreachable in case it points to a moved object

This commit is contained in:
Joel Dice 2009-09-01 18:32:21 -06:00
parent 6aff383ee1
commit 84ac2e417d

View File

@ -379,13 +379,15 @@ referenceTargetUnreachable(Thread* t, Heap::Visitor* v, object* p)
void void
referenceUnreachable(Thread* t, Heap::Visitor* v, object* p) referenceUnreachable(Thread* t, Heap::Visitor* v, object* p)
{ {
object r = static_cast<object>(t->m->heap->follow(*p));
if (DebugReferences) { if (DebugReferences) {
fprintf(stderr, "reference %p unreachable (target %p)\n", fprintf(stderr, "reference %p unreachable (target %p)\n",
*p, jreferenceTarget(t, *p)); *p, jreferenceTarget(t, r));
} }
if (jreferenceQueue(t, *p) if (jreferenceQueue(t, r)
and t->m->heap->status(jreferenceQueue(t, *p)) != Heap::Unreachable) and t->m->heap->status(jreferenceQueue(t, r)) != Heap::Unreachable)
{ {
// queue is reachable - add the reference // queue is reachable - add the reference
referenceTargetUnreachable(t, v, p); referenceTargetUnreachable(t, v, p);