Bug 680937, part 1 - Don't always mark wrapped native keys. r=billm

This commit is contained in:
Andrew McCreight
2011-12-15 17:44:34 -08:00
parent ddb044b15b
commit 611268b266

View File

@@ -203,13 +203,6 @@ class WeakMap : public HashMap<Key, Value, HashPolicy, RuntimeAllocPolicy>, publ
/* If the entry is live, ensure its key and value are marked. */
if (kp.isMarked(k)) {
markedAny |= vp.mark(v);
} else if (kp.overrideKeyMarking(k)) {
// We always mark wrapped natives. This will cause leaks. Bug 680937
// will fix this so XPC wrapped natives are only marked during
// non-BLACK marking (ie grey marking).
kp.mark(k);
vp.mark(v);
markedAny = true;
}
JS_ASSERT_IF(kp.isMarked(k), vp.isMarked(v));
}
@@ -263,7 +256,6 @@ class DefaultMarkPolicy<HeapValue> {
js::gc::MarkValue(tracer, x, "WeakMap entry");
return true;
}
bool overrideKeyMarking(const HeapValue &k) { return false; }
};
template <>
@@ -281,13 +273,6 @@ class DefaultMarkPolicy<HeapPtrObject> {
js::gc::MarkObject(tracer, x, "WeakMap entry");
return true;
}
bool overrideKeyMarking(const HeapPtrObject &k) {
// We only need to worry about extra marking of keys when
// we're doing a GC marking pass.
if (!IS_GC_MARKING_TRACER(tracer))
return false;
return k->getClass()->ext.isWrappedNative;
}
};
template <>
@@ -305,7 +290,6 @@ class DefaultMarkPolicy<HeapPtrScript> {
js::gc::MarkScript(tracer, x, "WeakMap entry");
return true;
}
bool overrideKeyMarking(const HeapPtrScript &k) { return false; }
};
// Default trace policies