mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1242111 - Handle OOM in UpdateExecutionObservabilityOfScriptsInZone. (r=jimb)
This commit is contained in:
parent
f91b342e04
commit
6bda3b2173
8
js/src/jit-test/tests/debug/bug1242111.js
Normal file
8
js/src/jit-test/tests/debug/bug1242111.js
Normal file
@ -0,0 +1,8 @@
|
||||
// |jit-test| allow-oom
|
||||
|
||||
var g = newGlobal();
|
||||
g.debuggeeGlobal = [];
|
||||
g.eval("(" + function() {
|
||||
oomAfterAllocations(57);
|
||||
Debugger(debuggeeGlobal).onEnterFrame = function() {}
|
||||
} + ")()");
|
@ -2113,27 +2113,6 @@ UpdateExecutionObservabilityOfScriptsInZone(JSContext* cx, Zone* zone,
|
||||
JSRuntime* rt = cx->runtime();
|
||||
FreeOp* fop = cx->runtime()->defaultFreeOp();
|
||||
|
||||
// Mark active baseline scripts in the observable set so that they don't
|
||||
// get discarded. They will be recompiled.
|
||||
for (JitActivationIterator actIter(rt); !actIter.done(); ++actIter) {
|
||||
if (actIter->compartment()->zone() != zone)
|
||||
continue;
|
||||
|
||||
for (JitFrameIterator iter(actIter); !iter.done(); ++iter) {
|
||||
switch (iter.type()) {
|
||||
case JitFrame_BaselineJS:
|
||||
MarkBaselineScriptActiveIfObservable(iter.script(), obs);
|
||||
break;
|
||||
case JitFrame_IonJS:
|
||||
MarkBaselineScriptActiveIfObservable(iter.script(), obs);
|
||||
for (InlineFrameIterator inlineIter(rt, &iter); inlineIter.more(); ++inlineIter)
|
||||
MarkBaselineScriptActiveIfObservable(inlineIter.script(), obs);
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vector<JSScript*> scripts(cx);
|
||||
|
||||
// Iterate through observable scripts, invalidating their Ion scripts and
|
||||
@ -2158,6 +2137,30 @@ UpdateExecutionObservabilityOfScriptsInZone(JSContext* cx, Zone* zone,
|
||||
}
|
||||
}
|
||||
|
||||
// Code below this point must be infallible to ensure the active bit of
|
||||
// BaselineScripts is in a consistent state.
|
||||
//
|
||||
// Mark active baseline scripts in the observable set so that they don't
|
||||
// get discarded. They will be recompiled.
|
||||
for (JitActivationIterator actIter(rt); !actIter.done(); ++actIter) {
|
||||
if (actIter->compartment()->zone() != zone)
|
||||
continue;
|
||||
|
||||
for (JitFrameIterator iter(actIter); !iter.done(); ++iter) {
|
||||
switch (iter.type()) {
|
||||
case JitFrame_BaselineJS:
|
||||
MarkBaselineScriptActiveIfObservable(iter.script(), obs);
|
||||
break;
|
||||
case JitFrame_IonJS:
|
||||
MarkBaselineScriptActiveIfObservable(iter.script(), obs);
|
||||
for (InlineFrameIterator inlineIter(rt, &iter); inlineIter.more(); ++inlineIter)
|
||||
MarkBaselineScriptActiveIfObservable(inlineIter.script(), obs);
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Iterate through the scripts again and finish discarding
|
||||
// BaselineScripts. This must be done as a separate phase as we can only
|
||||
// discard the BaselineScript on scripts that have no IonScript.
|
||||
|
Loading…
Reference in New Issue
Block a user