From 9ba8c615d528362d76e9ba0b9899a5204476c059 Mon Sep 17 00:00:00 2001 From: Alexandre Lissy Date: Tue, 17 May 2022 20:44:24 +0000 Subject: [PATCH] Bug 1769624 - Verify shutdown status before asserting r=nika Differential Revision: https://phabricator.services.mozilla.com/D146567 --- ipc/glue/UtilityProcessManager.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/ipc/glue/UtilityProcessManager.cpp b/ipc/glue/UtilityProcessManager.cpp index a972b5f17e83..d4d671a685f8 100644 --- a/ipc/glue/UtilityProcessManager.cpp +++ b/ipc/glue/UtilityProcessManager.cpp @@ -126,6 +126,7 @@ RefPtr UtilityProcessManager::LaunchProcess( MOZ_ASSERT(NS_IsMainThread()); if (IsShutdown()) { + NS_WARNING("Reject early LaunchProcess() for Shutdown"); return GenericNonExclusivePromise::CreateAndReject(NS_ERROR_NOT_AVAILABLE, __func__); } @@ -133,6 +134,7 @@ RefPtr UtilityProcessManager::LaunchProcess( RefPtr p = GetProcess(aSandbox); if (p && p->mNumProcessAttempts) { // We failed to start the Utility process earlier, abort now. + NS_WARNING("Reject LaunchProcess() for earlier mNumProcessAttempts"); return GenericNonExclusivePromise::CreateAndReject(NS_ERROR_NOT_AVAILABLE, __func__); } @@ -156,6 +158,7 @@ RefPtr UtilityProcessManager::LaunchProcess( if (!p->mProcess->Launch(extraArgs)) { p->mNumProcessAttempts++; DestroyProcess(aSandbox); + NS_WARNING("Reject LaunchProcess() for mNumProcessAttempts++"); return GenericNonExclusivePromise::CreateAndReject(NS_ERROR_NOT_AVAILABLE, __func__); } @@ -165,11 +168,13 @@ RefPtr UtilityProcessManager::LaunchProcess( GetMainThreadSerialEventTarget(), __func__, [self, p, aSandbox](bool) { if (self->IsShutdown()) { + NS_WARNING("Reject LaunchProcess() after LaunchPromise() for Shutdown"); return GenericNonExclusivePromise::CreateAndReject( NS_ERROR_NOT_AVAILABLE, __func__); } if (self->IsProcessDestroyed(aSandbox)) { + NS_WARNING("Reject LaunchProcess() after LaunchPromise() for destroyed process"); return GenericNonExclusivePromise::CreateAndReject( NS_ERROR_NOT_AVAILABLE, __func__); } @@ -194,6 +199,7 @@ RefPtr UtilityProcessManager::LaunchProcess( p->mNumProcessAttempts++; self->DestroyProcess(aSandbox); } + NS_WARNING("Reject LaunchProcess() for LaunchPromise() rejection"); return GenericNonExclusivePromise::CreateAndReject(aError, __func__); }); @@ -244,8 +250,11 @@ RefPtr UtilityProcessManager::StartUtility( return GenericNonExclusivePromise::CreateAndResolve(true, __func__); }, - [](nsresult aError) { - MOZ_ASSERT_UNREACHABLE("Failure when starting actor"); + [self](nsresult aError) { + if (!self->IsShutdown()) { + MOZ_ASSERT_UNREACHABLE("Failure when starting actor"); + } + NS_WARNING("Reject StartUtility() for LaunchProcess() rejection"); return GenericNonExclusivePromise::CreateAndReject(aError, __func__); }); } @@ -289,9 +298,12 @@ UtilityProcessManager::StartAudioDecoding(base::ProcessId aOtherProcess) { return AudioDecodingPromise::CreateAndResolve(std::move(childPipe), __func__); }, - [](nsresult aError) { - MOZ_ASSERT_UNREACHABLE( - "PUtilityAudioDecoder: failure when starting actor"); + [self](nsresult aError) { + if (!self->IsShutdown()) { + MOZ_ASSERT_UNREACHABLE( + "PUtilityAudioDecoder: failure when starting actor"); + } + NS_WARNING("Reject StartAudioDecoding() for StartUtility() rejection"); return AudioDecodingPromise::CreateAndReject(aError, __func__); }); } -- 2.11.4.GIT