зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1433013 - Only cancel off-thread jobs for the current context when a worker thread exits r=luke
This commit is contained in:
Родитель
ea1ff80377
Коммит
d72b56bf6b
|
@ -0,0 +1,6 @@
|
|||
if (helperThreadCount() === 0)
|
||||
quit();
|
||||
|
||||
offThreadCompileScript("");
|
||||
evalInCooperativeThread("");
|
||||
runOffThreadScript();
|
|
@ -370,13 +370,28 @@ DeleteOffThreadJob(JSContext* cx, OffThreadJob* job)
|
|||
}
|
||||
|
||||
static void
|
||||
CancelAllOffThreadJobs(JSContext* cx)
|
||||
CancelOffThreadJobsForContext(JSContext* cx)
|
||||
{
|
||||
// Parse jobs may be blocked waiting on GC.
|
||||
gc::FinishGC(cx);
|
||||
|
||||
CancelOffThreadParses(cx->runtime());
|
||||
// Wait for jobs belonging to this context.
|
||||
ShellContext* sc = GetShellContext(cx);
|
||||
while (!sc->offThreadJobs.empty()) {
|
||||
OffThreadJob* job = sc->offThreadJobs.popCopy();
|
||||
job->waitUntilDone(cx);
|
||||
js_delete(job);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
CancelOffThreadJobsForRuntime(JSContext* cx)
|
||||
{
|
||||
// Parse jobs may be blocked waiting on GC.
|
||||
gc::FinishGC(cx);
|
||||
|
||||
// Cancel jobs belonging to this runtime.
|
||||
CancelOffThreadParses(cx->runtime());
|
||||
ShellContext* sc = GetShellContext(cx);
|
||||
while (!sc->offThreadJobs.empty())
|
||||
js_delete(sc->offThreadJobs.popCopy());
|
||||
|
@ -3680,7 +3695,7 @@ WorkerMain(void* arg)
|
|||
return;
|
||||
|
||||
auto guard = mozilla::MakeScopeExit([&] {
|
||||
CancelAllOffThreadJobs(cx);
|
||||
CancelOffThreadJobsForContext(cx);
|
||||
JS_DestroyContext(cx);
|
||||
js_delete(sc);
|
||||
if (input->siblingContext) {
|
||||
|
@ -9308,7 +9323,7 @@ main(int argc, char** argv, char** envp)
|
|||
|
||||
DestructSharedArrayBufferMailbox();
|
||||
|
||||
CancelAllOffThreadJobs(cx);
|
||||
CancelOffThreadJobsForRuntime(cx);
|
||||
|
||||
JS_DestroyContext(cx);
|
||||
return result;
|
||||
|
|
Загрузка…
Ссылка в новой задаче