mirror of
https://github.com/Basilisk-Development-Team/UXP-mirror.git
synced 2026-11-13 04:42:01 -05:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d654ede2c8 |
No files matched your search
@@ -119,9 +119,9 @@ struct WeakCell {
|
|||||||
if (!target)
|
if (!target)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!enabled) {
|
if (!enabled || IsInsideNursery(target)) {
|
||||||
// Do nothing
|
// Weak edges must be tenured.
|
||||||
} else if (IsInsideNursery(target)) {
|
// Trace strongly if inside nursery or WeakRef disabled.
|
||||||
TraceManuallyBarrieredEdge(trc, object.unsafeGet(), name);
|
TraceManuallyBarrieredEdge(trc, object.unsafeGet(), name);
|
||||||
} else {
|
} else {
|
||||||
if (trc->isMarkingTracer() && !target->asTenured().zone()->isCollecting())
|
if (trc->isMarkingTracer() && !target->asTenured().zone()->isCollecting())
|
||||||
@@ -130,10 +130,15 @@ struct WeakCell {
|
|||||||
}
|
}
|
||||||
} else if (kind == WeakCellKind::Symbol) {
|
} else if (kind == WeakCellKind::Symbol) {
|
||||||
JS::Symbol* target = symbol.unbarrieredGet();
|
JS::Symbol* target = symbol.unbarrieredGet();
|
||||||
if (enabled && target) {
|
if (target) {
|
||||||
if (trc->isMarkingTracer() && !target->asTenured().zone()->isCollecting())
|
if (!enabled) {
|
||||||
return;
|
// Trace strongly if WeakRef disabled.
|
||||||
TraceWeakEdge(trc, &symbol, name);
|
TraceManuallyBarrieredEdge(trc, symbol.unsafeGet(), name);
|
||||||
|
} else {
|
||||||
|
if (trc->isMarkingTracer() && !target->asTenured().zone()->isCollecting())
|
||||||
|
return;
|
||||||
|
TraceWeakEdge(trc, &symbol, name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -216,20 +216,25 @@ WeakRefObject::trace(JSTracer* trc, JSObject* obj)
|
|||||||
if (!target)
|
if (!target)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!data->enabled) {
|
if (!data->enabled || IsInsideNursery(target)) {
|
||||||
// Pref disabled, don't do anything.
|
// Weak edges must be tenured; trace strongly while referent is in
|
||||||
} else if (IsInsideNursery(target)) {
|
// the nursery or if WeakRefs are disabled by pref.
|
||||||
// Weak edges must be tenured; trace strongly while referent is in the nursery.
|
|
||||||
TraceManuallyBarrieredEdge(trc, data->objectTarget.unsafeGet(),
|
TraceManuallyBarrieredEdge(trc, data->objectTarget.unsafeGet(),
|
||||||
"WeakRef nursery referent");
|
"WeakRef strong referent");
|
||||||
} else {
|
} else {
|
||||||
TraceWeakEdge(trc, &data->objectTarget, "WeakRef referent");
|
TraceWeakEdge(trc, &data->objectTarget, "WeakRef referent");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
MOZ_ASSERT(data->isSymbol());
|
MOZ_ASSERT(data->isSymbol());
|
||||||
JS::Symbol* target = data->symbolTarget.unbarrieredGet();
|
JS::Symbol* target = data->symbolTarget.unbarrieredGet();
|
||||||
if (data->enabled && target)
|
if (target) {
|
||||||
TraceWeakEdge(trc, &data->symbolTarget, "WeakRef symbol referent");
|
if (data->enabled) {
|
||||||
|
TraceWeakEdge(trc, &data->symbolTarget, "WeakRef symbol referent");
|
||||||
|
} else {
|
||||||
|
TraceManuallyBarrieredEdge(trc, data->symbolTarget.unsafeGet(),
|
||||||
|
"WeakRef strong symbol referent");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user