зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 2 changesets (bug 1709184) for xpcshell failures. CLOSED TREE
Backed out changeset 46d7864a45df (bug 1709184) Backed out changeset ac48b4d61b39 (bug 1709184)
This commit is contained in:
Родитель
9550c6467f
Коммит
66dbc65ccb
|
@ -315,7 +315,6 @@ bool AppShutdown::IsRestarting() {
|
|||
|
||||
#ifdef DEBUG
|
||||
static bool sNotifyingShutdownObservers = false;
|
||||
static bool sAdvancingShutdownPhase = false;
|
||||
|
||||
bool AppShutdown::IsNoOrLegalShutdownTopic(const char* aTopic) {
|
||||
if (!XRE_IsParentProcess()) {
|
||||
|
@ -333,12 +332,6 @@ void AppShutdown::AdvanceShutdownPhaseInternal(
|
|||
ShutdownPhase aPhase, bool doNotify, const char16_t* aNotificationData,
|
||||
const nsCOMPtr<nsISupports>& aNotificationSubject) {
|
||||
AssertIsOnMainThread();
|
||||
#ifdef DEBUG
|
||||
// Prevent us from re-entrance
|
||||
MOZ_ASSERT(!sAdvancingShutdownPhase);
|
||||
sAdvancingShutdownPhase = true;
|
||||
auto exit = MakeScopeExit([] { sAdvancingShutdownPhase = false; });
|
||||
#endif
|
||||
|
||||
// We ensure that we can move only forward. We cannot
|
||||
// MOZ_ASSERT here as there are some tests that fire
|
||||
|
@ -347,23 +340,6 @@ void AppShutdown::AdvanceShutdownPhaseInternal(
|
|||
if (sCurrentShutdownPhase >= aPhase) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIThread> thread = do_GetCurrentThread();
|
||||
if (sCurrentShutdownPhase >= ShutdownPhase::AppShutdownConfirmed) {
|
||||
// Give runnables dispatched so far as part of the ongoing phase a chance
|
||||
// to run before actually advancing the phase. We can do this only after
|
||||
// we passed the point of no return and thus can expect a linear flow
|
||||
// through our shutdown phases. This way the processing is also covered
|
||||
// by the terminator's timer.
|
||||
// Note that this happens only for main thread runnables, such that the
|
||||
// correct way of ensuring shutdown processing remains to have an async
|
||||
// shutdown blocker.
|
||||
if (thread) {
|
||||
NS_ProcessPendingEvents(thread);
|
||||
}
|
||||
}
|
||||
|
||||
// From now on any IsInOrBeyond checks will find the new phase set.
|
||||
sCurrentShutdownPhase = aPhase;
|
||||
|
||||
// TODO: Bug 1768581
|
||||
|
@ -395,10 +371,6 @@ void AppShutdown::AdvanceShutdownPhaseInternal(
|
|||
#endif
|
||||
obsService->NotifyObservers(aNotificationSubject, aTopic,
|
||||
aNotificationData);
|
||||
// Empty our MT event queue again after the notification has finished
|
||||
if (thread) {
|
||||
NS_ProcessPendingEvents(thread);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -585,6 +585,7 @@ nsresult ShutdownXPCOM(nsIServiceManager* aServMgr) {
|
|||
|
||||
// This must happen after the shutdown of media and widgets, which
|
||||
// are triggered by the NS_XPCOM_SHUTDOWN_OBSERVER_ID notification.
|
||||
NS_ProcessPendingEvents(thread);
|
||||
gfxPlatform::ShutdownLayersIPC();
|
||||
|
||||
mozilla::AppShutdown::AdvanceShutdownPhase(
|
||||
|
@ -594,11 +595,11 @@ nsresult ShutdownXPCOM(nsIServiceManager* aServMgr) {
|
|||
// dispatches to non main-thread threads.
|
||||
ThreadEventTarget::XPCOMShutdownThreadsNotificationFinished();
|
||||
#endif
|
||||
NS_ProcessPendingEvents(thread);
|
||||
|
||||
// Shutdown the timer thread and all timers that might still be alive
|
||||
nsTimerImpl::Shutdown();
|
||||
|
||||
// Have an extra round of processing after the timers went away.
|
||||
NS_ProcessPendingEvents(thread);
|
||||
|
||||
// Shutdown all remaining threads. This method does not return until
|
||||
|
@ -616,9 +617,11 @@ nsresult ShutdownXPCOM(nsIServiceManager* aServMgr) {
|
|||
// XPCOMShutdownFinal is the default phase for ClearOnShutdown.
|
||||
// This AdvanceShutdownPhase will thus free most ClearOnShutdown()'ed
|
||||
// smart pointers. Some destructors may fire extra main thread runnables
|
||||
// that will be processed inside AdvanceShutdownPhase.
|
||||
// that will be processed below.
|
||||
AppShutdown::AdvanceShutdownPhase(ShutdownPhase::XPCOMShutdownFinal);
|
||||
|
||||
NS_ProcessPendingEvents(thread);
|
||||
|
||||
// Shutdown the main thread, processing our last round of events, and then
|
||||
// mark that we've finished main thread event processing.
|
||||
nsThreadManager::get().ShutdownMainThread();
|
||||
|
|
Загрузка…
Ссылка в новой задаче