diff options
author | Moonchild <mcwerewolf@gmail.com> | 2018-07-05 22:22:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-05 22:22:47 +0200 |
commit | c3fe7f59c8b6c1a23f5ae85f0697470fad560d68 (patch) | |
tree | 93fb783c7d463225be63f76102bddec19965bc93 /dom/workers/ScriptLoader.cpp | |
parent | 06ccf0f73ade5b436d2e7e00f81db7aebf7960cf (diff) | |
parent | a80267e9e88b3dcebf7f8f1f6f10931a99ddf2ca (diff) | |
download | UXP-c3fe7f59c8b6c1a23f5ae85f0697470fad560d68.tar UXP-c3fe7f59c8b6c1a23f5ae85f0697470fad560d68.tar.gz UXP-c3fe7f59c8b6c1a23f5ae85f0697470fad560d68.tar.lz UXP-c3fe7f59c8b6c1a23f5ae85f0697470fad560d68.tar.xz UXP-c3fe7f59c8b6c1a23f5ae85f0697470fad560d68.zip |
Merge pull request #597 from janekptacijarabaci/dom_workers_terminate_1
Sync event loops in workers should be created only if compatible with the worker shutdown status
Diffstat (limited to 'dom/workers/ScriptLoader.cpp')
-rw-r--r-- | dom/workers/ScriptLoader.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/dom/workers/ScriptLoader.cpp b/dom/workers/ScriptLoader.cpp index 46545e737..56b18441e 100644 --- a/dom/workers/ScriptLoader.cpp +++ b/dom/workers/ScriptLoader.cpp @@ -2118,12 +2118,16 @@ LoadAllScripts(WorkerPrivate* aWorkerPrivate, aWorkerPrivate->AssertIsOnWorkerThread(); NS_ASSERTION(!aLoadInfos.IsEmpty(), "Bad arguments!"); - AutoSyncLoopHolder syncLoop(aWorkerPrivate); + AutoSyncLoopHolder syncLoop(aWorkerPrivate, Terminating); + nsCOMPtr<nsIEventTarget> syncLoopTarget = syncLoop.GetEventTarget(); + if (!syncLoopTarget) { + aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); + return; + } RefPtr<ScriptLoaderRunnable> loader = - new ScriptLoaderRunnable(aWorkerPrivate, syncLoop.EventTarget(), - aLoadInfos, aIsMainScript, aWorkerScriptType, - aRv); + new ScriptLoaderRunnable(aWorkerPrivate, syncLoopTarget, aLoadInfos, + aIsMainScript, aWorkerScriptType, aRv); NS_ASSERTION(aLoadInfos.IsEmpty(), "Should have swapped!"); @@ -2184,7 +2188,7 @@ ChannelFromScriptURLWorkerThread(JSContext* aCx, new ChannelGetterRunnable(aParent, aScriptURL, aChannel); ErrorResult rv; - getter->Dispatch(rv); + getter->Dispatch(Terminating, rv); if (rv.Failed()) { NS_ERROR("Failed to dispatch!"); return rv.StealNSResult(); |