зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1682536 - Use references/NotNull in CacheWorkerRef. r=dom-workers-and-storage-reviewers,asuth
Differential Revision: https://phabricator.services.mozilla.com/D99774
This commit is contained in:
Родитель
2cc4d91a28
Коммит
88142da40d
|
@ -26,14 +26,14 @@ void ActorChild::SetWorkerRef(SafeRefPtr<CacheWorkerRef> aWorkerRef) {
|
|||
|
||||
mWorkerRef = std::move(aWorkerRef);
|
||||
if (mWorkerRef) {
|
||||
mWorkerRef->AddActor(this);
|
||||
mWorkerRef->AddActor(*this);
|
||||
}
|
||||
}
|
||||
|
||||
void ActorChild::RemoveWorkerRef() {
|
||||
MOZ_ASSERT_IF(!NS_IsMainThread(), mWorkerRef);
|
||||
if (mWorkerRef) {
|
||||
mWorkerRef->RemoveActor(this);
|
||||
mWorkerRef->RemoveActor(*this);
|
||||
mWorkerRef = nullptr;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -92,33 +92,31 @@ SafeRefPtr<CacheWorkerRef> CacheWorkerRef::PreferBehavior(
|
|||
return static_cast<bool>(replace) ? std::move(replace) : std::move(orig);
|
||||
}
|
||||
|
||||
void CacheWorkerRef::AddActor(ActorChild* aActor) {
|
||||
void CacheWorkerRef::AddActor(ActorChild& aActor) {
|
||||
NS_ASSERT_OWNINGTHREAD(CacheWorkerRef);
|
||||
MOZ_DIAGNOSTIC_ASSERT(aActor);
|
||||
MOZ_ASSERT(!mActorList.Contains(aActor));
|
||||
MOZ_ASSERT(!mActorList.Contains(&aActor));
|
||||
|
||||
mActorList.AppendElement(aActor);
|
||||
mActorList.AppendElement(WrapNotNullUnchecked(&aActor));
|
||||
|
||||
// Allow an actor to be added after we've entered the Notifying case. We
|
||||
// can't stop the actor creation from racing with out destruction of the
|
||||
// other actors and we need to wait for this extra one to close as well.
|
||||
// Signal it should destroy itself right away.
|
||||
if (mNotified) {
|
||||
aActor->StartDestroy();
|
||||
aActor.StartDestroy();
|
||||
}
|
||||
}
|
||||
|
||||
void CacheWorkerRef::RemoveActor(ActorChild* aActor) {
|
||||
void CacheWorkerRef::RemoveActor(ActorChild& aActor) {
|
||||
NS_ASSERT_OWNINGTHREAD(CacheWorkerRef);
|
||||
MOZ_DIAGNOSTIC_ASSERT(aActor);
|
||||
|
||||
#if defined(RELEASE_OR_BETA)
|
||||
mActorList.RemoveElement(aActor);
|
||||
mActorList.RemoveElement(&aActor);
|
||||
#else
|
||||
MOZ_DIAGNOSTIC_ASSERT(mActorList.RemoveElement(aActor));
|
||||
MOZ_DIAGNOSTIC_ASSERT(mActorList.RemoveElement(&aActor));
|
||||
#endif
|
||||
|
||||
MOZ_ASSERT(!mActorList.Contains(aActor));
|
||||
MOZ_ASSERT(!mActorList.Contains(&aActor));
|
||||
|
||||
if (mActorList.IsEmpty()) {
|
||||
mStrongWorkerRef = nullptr;
|
||||
|
@ -135,9 +133,8 @@ void CacheWorkerRef::Notify() {
|
|||
|
||||
// Start the asynchronous destruction of our actors. These will call back
|
||||
// into RemoveActor() once the actor is destroyed.
|
||||
for (uint32_t i = 0; i < mActorList.Length(); ++i) {
|
||||
MOZ_DIAGNOSTIC_ASSERT(mActorList[i]);
|
||||
mActorList[i]->StartDestroy();
|
||||
for (const auto& actor : mActorList) {
|
||||
actor->StartDestroy();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -35,8 +35,8 @@ class CacheWorkerRef final : public SafeRefCounted<CacheWorkerRef> {
|
|||
static SafeRefPtr<CacheWorkerRef> PreferBehavior(
|
||||
SafeRefPtr<CacheWorkerRef> aCurrentRef, Behavior aBehavior);
|
||||
|
||||
void AddActor(ActorChild* aActor);
|
||||
void RemoveActor(ActorChild* aActor);
|
||||
void AddActor(ActorChild& aActor);
|
||||
void RemoveActor(ActorChild& aActor);
|
||||
|
||||
bool Notified() const;
|
||||
|
||||
|
@ -45,7 +45,7 @@ class CacheWorkerRef final : public SafeRefCounted<CacheWorkerRef> {
|
|||
|
||||
void Notify();
|
||||
|
||||
nsTArray<ActorChild*> mActorList;
|
||||
nsTArray<NotNull<ActorChild*>> mActorList;
|
||||
|
||||
Behavior mBehavior;
|
||||
bool mNotified;
|
||||
|
|
Загрузка…
Ссылка в новой задаче