--- a/ipc/glue/BackgroundImpl.cpp
+++ b/ipc/glue/BackgroundImpl.cpp
@@ -1419,16 +1419,17 @@ ChildImpl::Shutdown()
if (threadLocalInfo) {
#ifdef DEBUG
MOZ_ASSERT(!threadLocalInfo->mClosed);
threadLocalInfo->mClosed = true;
#endif
ThreadLocalDestructor(threadLocalInfo);
+ sMainThreadInfo = nullptr;
}
}
ChildImpl::ThreadLocalInfo* ChildImpl::sMainThreadInfo = nullptr;
// static
PBackgroundChild*
ChildImpl::GetForCurrentThread()
@@ -1448,16 +1449,20 @@ ChildImpl::GetForCurrentThread()
/* static */
PBackgroundChild*
ChildImpl::GetOrCreateForCurrentThread()
{
MOZ_ASSERT(sThreadLocalIndex != kBadThreadLocalIndex,
"BackgroundChild::Startup() was never called!");
+ if (NS_IsMainThread() && sShutdownHasStarted) {
+ return nullptr;
+ }
+
auto threadLocalInfo = NS_IsMainThread() ? sMainThreadInfo :
static_cast<ThreadLocalInfo*>(PR_GetThreadPrivate(sThreadLocalIndex));
if (!threadLocalInfo) {
nsAutoPtr<ThreadLocalInfo> newInfo(new ThreadLocalInfo());
if (NS_IsMainThread()) {
sMainThreadInfo = newInfo;