Revert "fix ordering of weak reference and finalization processing"

This reverts commit 0a32a7b7af8bf75315a1e729843f295954c2ebec.

Actually, I had it right the first time, somewhat by accident.
This commit is contained in:
Joel Dice 2007-07-04 12:43:42 -06:00
parent 0a32a7b7af
commit 1182ea9540

View File

@ -763,26 +763,6 @@ collect(Machine* m, Heap::CollectionType type)
}
Thread* t = m->rootThread;
object p = m->weakReferences;
m->weakReferences = 0;
while (p) {
object o = jreferenceTarget(t, p);
object followed = m->heap->follow(o);
if (followed == o) {
// object has not been collected
object x = p;
p = weakReferenceNext(t, x);
weakReferenceNext(t, x) = m->weakReferences;
m->weakReferences = x;
} else {
jreferenceTarget(t, p) = followed;
object x = p;
p = weakReferenceNext(t, x);
weakReferenceNext(t, x) = 0;
}
}
for (object* f = &(m->finalizers); *f;) {
object o = finalizerTarget(t, *f);
if (m->heap->follow(o) == o) {
@ -803,6 +783,21 @@ collect(Machine* m, Heap::CollectionType type)
for (object* f = &(m->doomed); *f; f = &finalizerNext(t, *f)) {
v->visit(f);
}
for (object p = m->weakReferences; p;) {
object o = jreferenceTarget(t, p);
object followed = m->heap->follow(o);
if (followed == o) {
// object has not been collected
jreferenceTarget(t, p) = 0;
} else {
jreferenceTarget(t, p) = followed;
}
object last = p;
p = weakReferenceNext(t, p);
weakReferenceNext(t, last) = 0;
}
}
virtual unsigned sizeInWords(object o) {
@ -936,12 +931,6 @@ collect(Machine* m, Heap::CollectionType type)
}
m->doomed = 0;
for (object p = m->weakReferences; p;) {
jreferenceTarget(t, p) = 0;
object x = p;
p = weakReferenceNext(t, x);
weakReferenceNext(t, x) = 0;
}
m->weakReferences = 0;
}