Bug 1412181 - add a proxy to be registered with ClearOnShutdown() to clear MediaCache::sThread. r=gerald

MozReview-Commit-ID: 9SXSKTP9Twb

--HG--
extra : rebase_source : 1cec3d8e307c980e2634fdc43ff9333833cb5547
extra : source : 2fa3d4a310a6e5765ee51cd3115013434d4662e5
This commit is contained in:
JW Wang 2017-10-27 11:38:53 +08:00
Родитель 40de7fdd1a
Коммит c94f001983
1 изменённых файлов: 12 добавлений и 13 удалений

Просмотреть файл

@ -268,15 +268,6 @@ public:
uint32_t mNext;
};
// Called during shutdown to clear sThread.
void operator=(std::nullptr_t)
{
nsCOMPtr<nsIThread> thread = sThread.forget();
if (thread) {
thread->Shutdown();
}
}
protected:
explicit MediaCache(MediaBlockCacheBase* aCache)
: mNextResourceID(1)
@ -726,10 +717,18 @@ MediaCache::GetMediaCache(int64_t aContentLength)
return nullptr;
}
sThread = thread.forget();
// Note it is safe to pass an invalid pointer for operator=(std::nullptr_t)
// is non-virtual and it will not access |this|.
ClearOnShutdown(reinterpret_cast<MediaCache*>(0x1),
ShutdownPhase::ShutdownThreads);
static struct ClearThread
{
// Called during shutdown to clear sThread.
void operator=(std::nullptr_t)
{
nsCOMPtr<nsIThread> thread = sThread.forget();
MOZ_ASSERT(thread);
thread->Shutdown();
}
} sClearThread;
ClearOnShutdown(&sClearThread, ShutdownPhase::ShutdownThreads);
}
if (!sThread) {