diff --git a/js/src/jit-test/lib/prolog.js b/js/src/jit-test/lib/prolog.js index 54ddabde597..eccb7291c21 100644 --- a/js/src/jit-test/lib/prolog.js +++ b/js/src/jit-test/lib/prolog.js @@ -32,5 +32,9 @@ if (!("verifypostbarriers" in this)) { verifypostbarriers = function() { } } +if (!("gcPreserveCode" in this)) { + gcPreserveCode = function() { } +} + if ("options" in this) options("allow_xml"); diff --git a/js/src/jsgc.cpp b/js/src/jsgc.cpp index 5a9c37b5194..6a9af5bc9fe 100644 --- a/js/src/jsgc.cpp +++ b/js/src/jsgc.cpp @@ -4079,7 +4079,7 @@ ResetIncrementalGC(JSRuntime *rt, const char *reason) AutoCopyFreeListToArenas copy(rt); for (GCCompartmentsIter c(rt); !c.done(); c.next()) { if (c->isGCMarking()) { - c->setNeedsBarrier(false, JSCompartment::DontUpdateIon); + c->setNeedsBarrier(false, JSCompartment::UpdateIon); c->setGCState(JSCompartment::NoGC); wasMarking = true; } @@ -4154,12 +4154,12 @@ AutoGCSlice::AutoGCSlice(JSRuntime *rt) AutoGCSlice::~AutoGCSlice() { - for (GCCompartmentsIter c(runtime); !c.done(); c.next()) { + /* We can't use GCCompartmentsIter if this is the end of the last slice. */ + for (CompartmentsIter c(runtime); !c.done(); c.next()) { if (c->isGCMarking()) { c->setNeedsBarrier(true, JSCompartment::UpdateIon); c->arenas.prepareForIncrementalGC(runtime); } else { - JS_ASSERT(c->isGCSweeping()); c->setNeedsBarrier(false, JSCompartment::UpdateIon); } }