Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit c69f537

Browse files
committed
Bug 1922889 - add mutex. r=media-playback-reviewers,aosmond
Differential Revision: https://phabricator.services.mozilla.com/D226398
1 parent 45c760e commit c69f537

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

dom/media/ipc/MFCDMChild.cpp

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ namespace mozilla {
2424
self->mManagerThread, callsite, \
2525
[self, promiseId, callsite]( \
2626
PMFCDMChild::method##Promise::ResolveOrRejectValue&& result) { \
27+
MutexAutoLock lock(self->mMutex); \
2728
auto iter = self->mPendingGenericPromises.find(promiseId); \
2829
if (iter == self->mPendingGenericPromises.end()) { \
2930
return; \
@@ -135,15 +136,18 @@ void MFCDMChild::Shutdown() {
135136
mRemoteRequest.DisconnectIfExists();
136137
mInitRequest.DisconnectIfExists();
137138

138-
for (auto& promise : mPendingSessionPromises) {
139-
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
140-
}
141-
mPendingSessionPromises.clear();
139+
{
140+
MutexAutoLock lock(mMutex);
141+
for (auto& promise : mPendingSessionPromises) {
142+
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
143+
}
144+
mPendingSessionPromises.clear();
142145

143-
for (auto& promise : mPendingGenericPromises) {
144-
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
146+
for (auto& promise : mPendingGenericPromises) {
147+
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
148+
}
149+
mPendingGenericPromises.clear();
145150
}
146-
mPendingGenericPromises.clear();
147151

148152
mRemotePromiseHolder.RejectIfExists(NS_ERROR_ABORT, __func__);
149153
mCapabilitiesPromiseHolder.RejectIfExists(NS_ERROR_ABORT, __func__);
@@ -274,6 +278,7 @@ RefPtr<MFCDMChild::SessionPromise> MFCDMChild::CreateSessionAndGenerateRequest(
274278
__func__);
275279
}
276280

281+
MutexAutoLock lock(mMutex);
277282
MOZ_ASSERT(mPendingSessionPromises.find(aPromiseId) ==
278283
mPendingSessionPromises.end());
279284
mPendingSessionPromises.emplace(aPromiseId,
@@ -287,6 +292,7 @@ RefPtr<MFCDMChild::SessionPromise> MFCDMChild::CreateSessionAndGenerateRequest(
287292
SendCreateSessionAndGenerateRequest(params)->Then(
288293
mManagerThread, __func__,
289294
[self, aPromiseId, this](const MFCDMSessionResult& result) {
295+
MutexAutoLock lock(mMutex);
290296
auto iter = mPendingSessionPromises.find(aPromiseId);
291297
if (iter == mPendingSessionPromises.end()) {
292298
return;
@@ -303,6 +309,7 @@ RefPtr<MFCDMChild::SessionPromise> MFCDMChild::CreateSessionAndGenerateRequest(
303309
},
304310
[self, aPromiseId,
305311
this](const mozilla::ipc::ResponseRejectReason& aReason) {
312+
MutexAutoLock lock(mMutex);
306313
auto iter = mPendingSessionPromises.find(aPromiseId);
307314
if (iter == mPendingSessionPromises.end()) {
308315
return;
@@ -325,6 +332,7 @@ RefPtr<GenericPromise> MFCDMChild::LoadSession(
325332
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
326333
}
327334

335+
MutexAutoLock lock(mMutex);
328336
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
329337
mPendingGenericPromises.end());
330338
mPendingGenericPromises.emplace(aPromiseId,
@@ -343,6 +351,7 @@ RefPtr<GenericPromise> MFCDMChild::UpdateSession(uint32_t aPromiseId,
343351
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
344352
}
345353

354+
MutexAutoLock lock(mMutex);
346355
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
347356
mPendingGenericPromises.end());
348357
mPendingGenericPromises.emplace(aPromiseId,
@@ -361,6 +370,7 @@ RefPtr<GenericPromise> MFCDMChild::CloseSession(uint32_t aPromiseId,
361370
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
362371
}
363372

373+
MutexAutoLock lock(mMutex);
364374
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
365375
mPendingGenericPromises.end());
366376
mPendingGenericPromises.emplace(aPromiseId,
@@ -378,6 +388,7 @@ RefPtr<GenericPromise> MFCDMChild::RemoveSession(uint32_t aPromiseId,
378388
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
379389
}
380390

391+
MutexAutoLock lock(mMutex);
381392
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
382393
mPendingGenericPromises.end());
383394
mPendingGenericPromises.emplace(aPromiseId,
@@ -395,6 +406,7 @@ RefPtr<GenericPromise> MFCDMChild::SetServerCertificate(
395406
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
396407
}
397408

409+
MutexAutoLock lock(mMutex);
398410
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
399411
mPendingGenericPromises.end());
400412
mPendingGenericPromises.emplace(aPromiseId,
@@ -412,6 +424,7 @@ RefPtr<GenericPromise> MFCDMChild::GetStatusForPolicy(
412424
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
413425
}
414426

427+
MutexAutoLock lock(mMutex);
415428
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
416429
mPendingGenericPromises.end());
417430
mPendingGenericPromises.emplace(aPromiseId,

dom/media/ipc/MFCDMChild.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,13 @@ class MFCDMChild final : public PMFCDMChild {
141141
MozPromiseHolder<GenericPromise> mRemoveSessionPromiseHolder;
142142
MozPromiseRequestHolder<RemoveSessionPromise> mRemoveSessionRequest;
143143

144+
mutable Mutex mMutex{"MFCDMChild"};
145+
144146
std::unordered_map<uint32_t, MozPromiseHolder<SessionPromise>>
145-
mPendingSessionPromises;
147+
mPendingSessionPromises MOZ_GUARDED_BY(mMutex);
146148

147149
std::unordered_map<uint32_t, MozPromiseHolder<GenericPromise>>
148-
mPendingGenericPromises;
150+
mPendingGenericPromises MOZ_GUARDED_BY(mMutex);
149151

150152
RefPtr<WMFCDMProxyCallback> mProxyCallback;
151153
};

0 commit comments

Comments
 (0)