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:
Csoregi Natalia 2022-11-17 16:43:59 +02:00
Родитель 9550c6467f
Коммит 66dbc65ccb
2 изменённых файлов: 5 добавлений и 30 удалений

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

@ -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();