forked from mirrors/gecko-dev
Bug 1922889 - add mutex. r=media-playback-reviewers,aosmond, a=dmeehan
Differential Revision: https://phabricator.services.mozilla.com/D226398
This commit is contained in:
parent
836cb2bb61
commit
9ca513777a
2 changed files with 24 additions and 9 deletions
|
|
@ -24,6 +24,7 @@ namespace mozilla {
|
||||||
self->mManagerThread, callsite, \
|
self->mManagerThread, callsite, \
|
||||||
[self, promiseId, callsite]( \
|
[self, promiseId, callsite]( \
|
||||||
PMFCDMChild::method##Promise::ResolveOrRejectValue&& result) { \
|
PMFCDMChild::method##Promise::ResolveOrRejectValue&& result) { \
|
||||||
|
MutexAutoLock lock(self->mMutex); \
|
||||||
auto iter = self->mPendingGenericPromises.find(promiseId); \
|
auto iter = self->mPendingGenericPromises.find(promiseId); \
|
||||||
if (iter == self->mPendingGenericPromises.end()) { \
|
if (iter == self->mPendingGenericPromises.end()) { \
|
||||||
return; \
|
return; \
|
||||||
|
|
@ -135,6 +136,8 @@ void MFCDMChild::Shutdown() {
|
||||||
mRemoteRequest.DisconnectIfExists();
|
mRemoteRequest.DisconnectIfExists();
|
||||||
mInitRequest.DisconnectIfExists();
|
mInitRequest.DisconnectIfExists();
|
||||||
|
|
||||||
|
{
|
||||||
|
MutexAutoLock lock(mMutex);
|
||||||
for (auto& promise : mPendingSessionPromises) {
|
for (auto& promise : mPendingSessionPromises) {
|
||||||
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
|
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
|
||||||
}
|
}
|
||||||
|
|
@ -144,6 +147,7 @@ void MFCDMChild::Shutdown() {
|
||||||
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
|
promise.second.RejectIfExists(NS_ERROR_ABORT, __func__);
|
||||||
}
|
}
|
||||||
mPendingGenericPromises.clear();
|
mPendingGenericPromises.clear();
|
||||||
|
}
|
||||||
|
|
||||||
mRemotePromiseHolder.RejectIfExists(NS_ERROR_ABORT, __func__);
|
mRemotePromiseHolder.RejectIfExists(NS_ERROR_ABORT, __func__);
|
||||||
mCapabilitiesPromiseHolder.RejectIfExists(NS_ERROR_ABORT, __func__);
|
mCapabilitiesPromiseHolder.RejectIfExists(NS_ERROR_ABORT, __func__);
|
||||||
|
|
@ -274,6 +278,7 @@ RefPtr<MFCDMChild::SessionPromise> MFCDMChild::CreateSessionAndGenerateRequest(
|
||||||
__func__);
|
__func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MutexAutoLock lock(mMutex);
|
||||||
MOZ_ASSERT(mPendingSessionPromises.find(aPromiseId) ==
|
MOZ_ASSERT(mPendingSessionPromises.find(aPromiseId) ==
|
||||||
mPendingSessionPromises.end());
|
mPendingSessionPromises.end());
|
||||||
mPendingSessionPromises.emplace(aPromiseId,
|
mPendingSessionPromises.emplace(aPromiseId,
|
||||||
|
|
@ -287,6 +292,7 @@ RefPtr<MFCDMChild::SessionPromise> MFCDMChild::CreateSessionAndGenerateRequest(
|
||||||
SendCreateSessionAndGenerateRequest(params)->Then(
|
SendCreateSessionAndGenerateRequest(params)->Then(
|
||||||
mManagerThread, __func__,
|
mManagerThread, __func__,
|
||||||
[self, aPromiseId, this](const MFCDMSessionResult& result) {
|
[self, aPromiseId, this](const MFCDMSessionResult& result) {
|
||||||
|
MutexAutoLock lock(mMutex);
|
||||||
auto iter = mPendingSessionPromises.find(aPromiseId);
|
auto iter = mPendingSessionPromises.find(aPromiseId);
|
||||||
if (iter == mPendingSessionPromises.end()) {
|
if (iter == mPendingSessionPromises.end()) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -303,6 +309,7 @@ RefPtr<MFCDMChild::SessionPromise> MFCDMChild::CreateSessionAndGenerateRequest(
|
||||||
},
|
},
|
||||||
[self, aPromiseId,
|
[self, aPromiseId,
|
||||||
this](const mozilla::ipc::ResponseRejectReason& aReason) {
|
this](const mozilla::ipc::ResponseRejectReason& aReason) {
|
||||||
|
MutexAutoLock lock(mMutex);
|
||||||
auto iter = mPendingSessionPromises.find(aPromiseId);
|
auto iter = mPendingSessionPromises.find(aPromiseId);
|
||||||
if (iter == mPendingSessionPromises.end()) {
|
if (iter == mPendingSessionPromises.end()) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -325,6 +332,7 @@ RefPtr<GenericPromise> MFCDMChild::LoadSession(
|
||||||
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MutexAutoLock lock(mMutex);
|
||||||
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
||||||
mPendingGenericPromises.end());
|
mPendingGenericPromises.end());
|
||||||
mPendingGenericPromises.emplace(aPromiseId,
|
mPendingGenericPromises.emplace(aPromiseId,
|
||||||
|
|
@ -343,6 +351,7 @@ RefPtr<GenericPromise> MFCDMChild::UpdateSession(uint32_t aPromiseId,
|
||||||
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MutexAutoLock lock(mMutex);
|
||||||
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
||||||
mPendingGenericPromises.end());
|
mPendingGenericPromises.end());
|
||||||
mPendingGenericPromises.emplace(aPromiseId,
|
mPendingGenericPromises.emplace(aPromiseId,
|
||||||
|
|
@ -361,6 +370,7 @@ RefPtr<GenericPromise> MFCDMChild::CloseSession(uint32_t aPromiseId,
|
||||||
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MutexAutoLock lock(mMutex);
|
||||||
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
||||||
mPendingGenericPromises.end());
|
mPendingGenericPromises.end());
|
||||||
mPendingGenericPromises.emplace(aPromiseId,
|
mPendingGenericPromises.emplace(aPromiseId,
|
||||||
|
|
@ -378,6 +388,7 @@ RefPtr<GenericPromise> MFCDMChild::RemoveSession(uint32_t aPromiseId,
|
||||||
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MutexAutoLock lock(mMutex);
|
||||||
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
||||||
mPendingGenericPromises.end());
|
mPendingGenericPromises.end());
|
||||||
mPendingGenericPromises.emplace(aPromiseId,
|
mPendingGenericPromises.emplace(aPromiseId,
|
||||||
|
|
@ -395,6 +406,7 @@ RefPtr<GenericPromise> MFCDMChild::SetServerCertificate(
|
||||||
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MutexAutoLock lock(mMutex);
|
||||||
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
||||||
mPendingGenericPromises.end());
|
mPendingGenericPromises.end());
|
||||||
mPendingGenericPromises.emplace(aPromiseId,
|
mPendingGenericPromises.emplace(aPromiseId,
|
||||||
|
|
@ -412,6 +424,7 @@ RefPtr<GenericPromise> MFCDMChild::GetStatusForPolicy(
|
||||||
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
return GenericPromise::CreateAndReject(NS_ERROR_ABORT, __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MutexAutoLock lock(mMutex);
|
||||||
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
MOZ_ASSERT(mPendingGenericPromises.find(aPromiseId) ==
|
||||||
mPendingGenericPromises.end());
|
mPendingGenericPromises.end());
|
||||||
mPendingGenericPromises.emplace(aPromiseId,
|
mPendingGenericPromises.emplace(aPromiseId,
|
||||||
|
|
|
||||||
|
|
@ -141,11 +141,13 @@ class MFCDMChild final : public PMFCDMChild {
|
||||||
MozPromiseHolder<GenericPromise> mRemoveSessionPromiseHolder;
|
MozPromiseHolder<GenericPromise> mRemoveSessionPromiseHolder;
|
||||||
MozPromiseRequestHolder<RemoveSessionPromise> mRemoveSessionRequest;
|
MozPromiseRequestHolder<RemoveSessionPromise> mRemoveSessionRequest;
|
||||||
|
|
||||||
|
mutable Mutex mMutex{"MFCDMChild"};
|
||||||
|
|
||||||
std::unordered_map<uint32_t, MozPromiseHolder<SessionPromise>>
|
std::unordered_map<uint32_t, MozPromiseHolder<SessionPromise>>
|
||||||
mPendingSessionPromises;
|
mPendingSessionPromises MOZ_GUARDED_BY(mMutex);
|
||||||
|
|
||||||
std::unordered_map<uint32_t, MozPromiseHolder<GenericPromise>>
|
std::unordered_map<uint32_t, MozPromiseHolder<GenericPromise>>
|
||||||
mPendingGenericPromises;
|
mPendingGenericPromises MOZ_GUARDED_BY(mMutex);
|
||||||
|
|
||||||
RefPtr<WMFCDMProxyCallback> mProxyCallback;
|
RefPtr<WMFCDMProxyCallback> mProxyCallback;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue