Bug 1856089 - Harden RequestResolver::ResolveOrReject against a race with WorkerRef::Notify. r=dom-storage-reviewers,asuth

Differential Revision: https://phabricator.services.mozilla.com/D190030
This commit is contained in:
Jens Stutte 2023-10-04 15:15:03 +00:00
Родитель f359a8f7c6
Коммит 109482b93c
1 изменённых файлов: 10 добавлений и 4 удалений

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

@ -427,13 +427,19 @@ void RequestResolver::ResolveOrReject() {
} else {
MOZ_ASSERT(mProxy);
promise = mProxy->WorkerPromise();
// The worker ref might have been notified already before we are run.
MutexAutoLock lock(mProxy->Lock());
if (!mProxy->CleanedUp()) {
promise = mProxy->WorkerPromise();
// Only clean up for worker case.
autoCleanup.emplace(mProxy);
// Only clean up for worker case.
autoCleanup.emplace(mProxy);
}
}
MOZ_ASSERT(promise);
if (!promise) {
return;
}
if (mType == Type::Estimate) {
if (NS_SUCCEEDED(mResultCode)) {