Issue #1742 - Part 4: Don't trigger read barriers when comparing wrapped pointers types

This is actually an undocumented dependency of Bug 1325406 for Linux and
SunOS.

Ref: BZ 1308236
This commit is contained in:
Jeremy Andrews 2022-05-26 18:57:18 -05:00 committed by roytam1
commit e632fc1e8c
9 changed files with 343 additions and 27 deletions

View file

@ -470,7 +470,7 @@ inline
void XPCWrappedNativeTearOff::JSObjectMoved(JSObject* obj, const JSObject* old)
{
MOZ_ASSERT(!IsMarked());
MOZ_ASSERT(mJSObject.unbarrieredGetPtr() == old);
MOZ_ASSERT(mJSObject == old);
mJSObject = obj;
}

View file

@ -935,7 +935,7 @@ void
XPCWrappedNative::FlatJSObjectMoved(JSObject* obj, const JSObject* old)
{
JS::AutoAssertGCCallback inCallback(obj);
MOZ_ASSERT(mFlatJSObject.unbarrieredGetPtr() == old);
MOZ_ASSERT(mFlatJSObject == old);
nsWrapperCache* cache = nullptr;
CallQueryInterface(mIdentity, &cache);

View file

@ -114,7 +114,7 @@ XPCWrappedNativeProto::CallPostCreatePrototype()
void
XPCWrappedNativeProto::JSProtoObjectFinalized(js::FreeOp* fop, JSObject* obj)
{
MOZ_ASSERT(obj == mJSProtoObject.unbarrieredGet(), "huh?");
MOZ_ASSERT(obj == mJSProtoObject, "huh?");
// Only remove this proto from the map if it is the one in the map.
ClassInfo2WrappedNativeProtoMap* map = GetScope()->GetWrappedNativeProtoMap();
@ -129,7 +129,7 @@ XPCWrappedNativeProto::JSProtoObjectFinalized(js::FreeOp* fop, JSObject* obj)
void
XPCWrappedNativeProto::JSProtoObjectMoved(JSObject* obj, const JSObject* old)
{
MOZ_ASSERT(mJSProtoObject.unbarrieredGet() == old);
MOZ_ASSERT(mJSProtoObject == old);
mJSProtoObject.init(obj); // Update without triggering barriers.
}