Bug 1922889 - add mutex. r=media-playback-reviewers,aosmond, a=dmeehan

Differential Revision: https://phabricator.services.mozilla.com/D226398
This commit is contained in:
alwu 2025-02-03 18:22:27 +00:00
parent 836cb2bb61
commit 9ca513777a
2 changed files with 24 additions and 9 deletions

View file

@ -24,6 +24,7 @@ namespace mozilla {
self->mManagerThread, callsite, \
[self, promiseId, callsite]( \
PMFCDMChild::method##Promise::ResolveOrRejectValue&& result) { \
MutexAutoLock lock(self->mMutex); \
auto iter = self->mPendingGenericPromises.find(promiseId); \
if (iter == self->mPendingGenericPromises.end()) { \
return; \
@ -135,15 +136,18 @@ void MFCDMChild::Shutdown() {
mRemoteRequest.DisconnectIfExists();
mInitRequest.DisconnectIfExists();
for (auto& promise : mPendingSessionPromises) {
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
}
mPendingSessionPromises.clear();
{
MutexAutoLock lock(mMutex);
for (auto& promise : mPendingSessionPromises) {
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
}
mPendingSessionPromises.clear();
for (auto& promise : mPendingGenericPromises) {
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
for (auto& promise : mPendingGenericPromises) {
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
}
mPendingGenericPromises.clear();
}
mPendingGenericPromises.clear();
mRemotePromiseHolder.RejectIfExists(NS_ERROR_ABORT, __func__);
mCapabilitiesPromiseHolder.RejectIfExists(NS_ERROR_ABORT, __func__);
@ -274,6 +278,7 @@ RefPtr<MFCDMChild::SessionPromise> MFCDMChild::CreateSessionAndGenerateRequest(
__func__);
}
MutexAutoLock lock(mMutex);
MOZ_ASSERT(mPendingSessionPromises.find(aPromiseId) ==
mPendingSessionPromises.end());
mPendingSessionPromises.emplace(aPromiseId,
@ -287,6 +292,7 @@ RefPtr<MFCDMChild::SessionPromise> MFCDMChild::CreateSessionAndGenerateRequest(
SendCreateSessionAndGenerateRequest(params)->Then(
mManagerThread, __func__,
[self, aPromiseId, this](const MFCDMSessionResult& result) {
MutexAutoLock lock(mMutex);
auto iter = mPendingSessionPromises.find(aPromiseId);
if (iter == mPendingSessionPromises.end()) {
return;
@ -303,6 +309,7 @@ RefPtr<MFCDMChild::SessionPromise> MFCDMChild::CreateSessionAndGenerateRequest(
},
[self, aPromiseId,
this](const mozilla::ipc::ResponseRejectReason& aReason) {
MutexAutoLock lock(mMutex);
auto iter = mPendingSessionPromises.find(aPromiseId);
if (iter == mPendingSessionPromises.end()) {
return;
@ -325,6 +332,7 @@ RefPtr<GenericPromise> MFCDMChild::LoadSession(
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
}
MutexAutoLock lock(mMutex);
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
mPendingGenericPromises.end());
mPendingGenericPromises.emplace(aPromiseId,
@ -343,6 +351,7 @@ RefPtr<GenericPromise> MFCDMChild::UpdateSession(uint32_t aPromiseId,
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
}
MutexAutoLock lock(mMutex);
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
mPendingGenericPromises.end());
mPendingGenericPromises.emplace(aPromiseId,
@ -361,6 +370,7 @@ RefPtr<GenericPromise> MFCDMChild::CloseSession(uint32_t aPromiseId,
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
}
MutexAutoLock lock(mMutex);
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
mPendingGenericPromises.end());
mPendingGenericPromises.emplace(aPromiseId,
@ -378,6 +388,7 @@ RefPtr<GenericPromise> MFCDMChild::RemoveSession(uint32_t aPromiseId,
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
}
MutexAutoLock lock(mMutex);
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
mPendingGenericPromises.end());
mPendingGenericPromises.emplace(aPromiseId,
@ -395,6 +406,7 @@ RefPtr<GenericPromise> MFCDMChild::SetServerCertificate(
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
}
MutexAutoLock lock(mMutex);
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
mPendingGenericPromises.end());
mPendingGenericPromises.emplace(aPromiseId,
@ -412,6 +424,7 @@ RefPtr<GenericPromise> MFCDMChild::GetStatusForPolicy(
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
}
MutexAutoLock lock(mMutex);
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
mPendingGenericPromises.end());
mPendingGenericPromises.emplace(aPromiseId,

View file

@ -141,11 +141,13 @@ class MFCDMChild final : public PMFCDMChild {
MozPromiseHolder<GenericPromise> mRemoveSessionPromiseHolder;
MozPromiseRequestHolder<RemoveSessionPromise> mRemoveSessionRequest;
mutable Mutex mMutex{"MFCDMChild"};
std::unordered_map<uint32_t, MozPromiseHolder<SessionPromise>>
mPendingSessionPromises;
mPendingSessionPromises MOZ_GUARDED_BY(mMutex);
std::unordered_map<uint32_t, MozPromiseHolder<GenericPromise>>
mPendingGenericPromises;
mPendingGenericPromises MOZ_GUARDED_BY(mMutex);
RefPtr<WMFCDMProxyCallback> mProxyCallback;
};