From 8df5d9263aa535386e3624120ca75886d05bc84a Mon Sep 17 00:00:00 2001 From: Ben Kelly Date: Mon, 12 Sep 2016 06:09:32 -0700 Subject: [PATCH] Bug 1301519 Don't crash if GetCurrentThreadWorkerPrivate() is called during worker shutdown. r=baku --- dom/workers/RuntimeService.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp index 1f53b4695d0a..8e16a601dacc 100644 --- a/dom/workers/RuntimeService.cpp +++ b/dom/workers/RuntimeService.cpp @@ -1437,7 +1437,9 @@ GetWorkerPrivateFromContext(JSContext* aCx) MOZ_ASSERT(aCx); void* cxPrivate = JS_GetContextPrivate(aCx); - MOZ_ASSERT(cxPrivate); + if (!cxPrivate) { + return nullptr; + } return static_cast(cxPrivate)->GetWorkerPrivate(); @@ -1457,7 +1459,13 @@ GetCurrentThreadWorkerPrivate() MOZ_ASSERT(cx); void* cxPrivate = JS_GetContextPrivate(cx); - MOZ_ASSERT(cxPrivate); + if (!cxPrivate) { + // This can happen if the nsCycleCollector_shutdown() in ~WorkerJSRuntime() + // triggers any calls to GetCurrentThreadWorkerPrivate(). At this stage + // CycleCollectedJSRuntime::Get() will still return a runtime, but + // the context private has already been cleared. + return nullptr; + } return static_cast(cxPrivate)->GetWorkerPrivate();