Commit e77f4837 authored by Jon Coppeard's avatar Jon Coppeard
Browse files

Bug 1273180 - Trigger major GC if necessary after minor GC r=terrence

parent e4ecb6b6
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -380,9 +380,7 @@ js::TenuringTracer::TenuringTracer(JSRuntime* rt, Nursery* nursery)
void
js::Nursery::collect(JSRuntime* rt, JS::gcreason::Reason reason, ObjectGroupList* pretenureGroups)
{
    if (rt->mainThread.suppressGC)
        return;

    MOZ_ASSERT(!rt->mainThread.suppressGC);
    JS_AbortIfWrongThread(rt);

    StoreBuffer& sb = rt->gc.storeBuffer;
+8 −1
Original line number Diff line number Diff line
@@ -6862,11 +6862,18 @@ GCRuntime::onOutOfMallocMemory(const AutoLockGC& lock)
void
GCRuntime::minorGCImpl(JS::gcreason::Reason reason, Nursery::ObjectGroupList* pretenureGroups)
{
    if (rt->mainThread.suppressGC)
        return;

    minorGCTriggerReason = JS::gcreason::NO_REASON;
    TraceLoggerThread* logger = TraceLoggerForMainThread(rt);
    AutoTraceLog logMinorGC(logger, TraceLogger_MinorGC);
    nursery.collect(rt, reason, pretenureGroups);
    MOZ_ASSERT_IF(!rt->mainThread.suppressGC, nursery.isEmpty());
    MOZ_ASSERT(nursery.isEmpty());

    AutoLockGC lock(rt);
    for (ZonesIter zone(rt, WithAtoms); !zone.done(); zone.next())
        maybeAllocTriggerZoneGC(zone, lock);
}

// Alternate to the runtime-taking form that allows marking object groups as