mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Backout bug 791174 for orange
This commit is contained in:
parent
a6ba37cd32
commit
b5056db604
@ -4074,8 +4074,6 @@ class AutoTraceSession {
|
||||
private:
|
||||
AutoTraceSession(const AutoTraceSession&) MOZ_DELETE;
|
||||
void operator=(const AutoTraceSession&) MOZ_DELETE;
|
||||
|
||||
JSRuntime::HeapState prevState;
|
||||
};
|
||||
|
||||
/* ...while this class is to be used only for garbage collection. */
|
||||
@ -4087,8 +4085,7 @@ class AutoGCSession : AutoTraceSession {
|
||||
|
||||
/* Start a new heap session. */
|
||||
AutoTraceSession::AutoTraceSession(JSRuntime *rt, JSRuntime::HeapState heapState)
|
||||
: runtime(rt),
|
||||
prevState(rt->heapState)
|
||||
: runtime(rt)
|
||||
{
|
||||
JS_ASSERT(!rt->noGCOrAllocationCheck);
|
||||
JS_ASSERT(!rt->isHeapBusy());
|
||||
@ -4099,7 +4096,7 @@ AutoTraceSession::AutoTraceSession(JSRuntime *rt, JSRuntime::HeapState heapState
|
||||
AutoTraceSession::~AutoTraceSession()
|
||||
{
|
||||
JS_ASSERT(runtime->isHeapBusy());
|
||||
runtime->heapState = prevState;
|
||||
runtime->heapState = JSRuntime::Idle;
|
||||
}
|
||||
|
||||
AutoGCSession::AutoGCSession(JSRuntime *rt)
|
||||
@ -4730,36 +4727,34 @@ ShrinkGCBuffers(JSRuntime *rt)
|
||||
#endif
|
||||
}
|
||||
|
||||
struct AutoFinishGC
|
||||
{
|
||||
AutoFinishGC(JSRuntime *rt) {
|
||||
if (rt->gcIncrementalState != NO_INCREMENTAL)
|
||||
FinishIncrementalGC(rt, gcreason::API);
|
||||
|
||||
rt->gcHelperThread.waitBackgroundSweepEnd();
|
||||
}
|
||||
};
|
||||
|
||||
struct AutoPrepareForTracing
|
||||
{
|
||||
AutoFinishGC finish;
|
||||
AutoTraceSession session;
|
||||
AutoCopyFreeListToArenas copy;
|
||||
|
||||
AutoPrepareForTracing(JSRuntime *rt)
|
||||
: finish(rt),
|
||||
session(rt),
|
||||
copy(rt)
|
||||
{}
|
||||
};
|
||||
|
||||
void
|
||||
TraceRuntime(JSTracer *trc)
|
||||
{
|
||||
JS_ASSERT(!IS_GC_MARKING_TRACER(trc));
|
||||
|
||||
AutoPrepareForTracing prep(trc->runtime);
|
||||
#ifdef JS_THREADSAFE
|
||||
{
|
||||
JSRuntime *rt = trc->runtime;
|
||||
if (!rt->isHeapBusy()) {
|
||||
AutoTraceSession session(rt);
|
||||
|
||||
rt->gcHelperThread.waitBackgroundSweepEnd();
|
||||
|
||||
AutoCopyFreeListToArenas copy(rt);
|
||||
RecordNativeStackTopForGC(rt);
|
||||
MarkRuntime(trc);
|
||||
return;
|
||||
}
|
||||
}
|
||||
#else
|
||||
AutoCopyFreeListToArenas copy(trc->runtime);
|
||||
RecordNativeStackTopForGC(trc->runtime);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Calls from inside a normal GC or a recursive calls are OK and do not
|
||||
* require session setup.
|
||||
*/
|
||||
MarkRuntime(trc);
|
||||
}
|
||||
|
||||
@ -4797,8 +4792,12 @@ IterateCompartmentsArenasCells(JSRuntime *rt, void *data,
|
||||
IterateArenaCallback arenaCallback,
|
||||
IterateCellCallback cellCallback)
|
||||
{
|
||||
AutoPrepareForTracing prop(rt);
|
||||
JS_ASSERT(!rt->isHeapBusy());
|
||||
|
||||
AutoTraceSession session(rt);
|
||||
rt->gcHelperThread.waitBackgroundSweepEnd();
|
||||
|
||||
AutoCopyFreeListToArenas copy(rt);
|
||||
for (CompartmentsIter c(rt); !c.done(); c.next()) {
|
||||
(*compartmentCallback)(rt, data, c);
|
||||
|
||||
@ -4815,7 +4814,11 @@ IterateCompartmentsArenasCells(JSRuntime *rt, void *data,
|
||||
void
|
||||
IterateChunks(JSRuntime *rt, void *data, IterateChunkCallback chunkCallback)
|
||||
{
|
||||
AutoPrepareForTracing prep(rt);
|
||||
/* :XXX: Any way to common this preamble with IterateCompartmentsArenasCells? */
|
||||
JS_ASSERT(!rt->isHeapBusy());
|
||||
|
||||
AutoTraceSession session(rt);
|
||||
rt->gcHelperThread.waitBackgroundSweepEnd();
|
||||
|
||||
for (js::GCChunkSet::Range r = rt->gcChunkSet.all(); !r.empty(); r.popFront())
|
||||
chunkCallback(rt, data, r.front());
|
||||
@ -4825,7 +4828,13 @@ void
|
||||
IterateCells(JSRuntime *rt, JSCompartment *compartment, AllocKind thingKind,
|
||||
void *data, IterateCellCallback cellCallback)
|
||||
{
|
||||
AutoPrepareForTracing prep(rt);
|
||||
/* :XXX: Any way to common this preamble with IterateCompartmentsArenasCells? */
|
||||
JS_ASSERT(!rt->isHeapBusy());
|
||||
|
||||
AutoTraceSession session(rt);
|
||||
rt->gcHelperThread.waitBackgroundSweepEnd();
|
||||
|
||||
AutoCopyFreeListToArenas copy(rt);
|
||||
|
||||
JSGCTraceKind traceKind = MapAllocToTraceKind(thingKind);
|
||||
size_t thingSize = Arena::thingSize(thingKind);
|
||||
@ -4845,7 +4854,13 @@ void
|
||||
IterateGrayObjects(JSCompartment *compartment, GCThingCallback *cellCallback, void *data)
|
||||
{
|
||||
JS_ASSERT(compartment);
|
||||
AutoPrepareForTracing prep(compartment->rt);
|
||||
JSRuntime *rt = compartment->rt;
|
||||
JS_ASSERT(!rt->isHeapBusy());
|
||||
|
||||
AutoTraceSession session(rt);
|
||||
rt->gcHelperThread.waitBackgroundSweepEnd();
|
||||
|
||||
AutoCopyFreeListToArenas copy(rt);
|
||||
|
||||
for (size_t finalizeKind = 0; finalizeKind <= FINALIZE_OBJECT_LAST; finalizeKind++) {
|
||||
for (CellIterUnderGC i(compartment, AllocKind(finalizeKind)); !i.done(); i.next()) {
|
||||
|
Loading…
Reference in New Issue
Block a user