зеркало из 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);
|
mWorkerRef = std::move(aWorkerRef);
|
||||||
if (mWorkerRef) {
|
if (mWorkerRef) {
|
||||||
mWorkerRef->AddActor(this);
|
mWorkerRef->AddActor(*this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActorChild::RemoveWorkerRef() {
|
void ActorChild::RemoveWorkerRef() {
|
||||||
MOZ_ASSERT_IF(!NS_IsMainThread(), mWorkerRef);
|
MOZ_ASSERT_IF(!NS_IsMainThread(), mWorkerRef);
|
||||||
if (mWorkerRef) {
|
if (mWorkerRef) {
|
||||||
mWorkerRef->RemoveActor(this);
|
mWorkerRef->RemoveActor(*this);
|
||||||
mWorkerRef = nullptr;
|
mWorkerRef = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,33 +92,31 @@ SafeRefPtr<CacheWorkerRef> CacheWorkerRef::PreferBehavior(
|
||||||
return static_cast<bool>(replace) ? std::move(replace) : std::move(orig);
|
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);
|
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
|
// 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
|
// 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.
|
// other actors and we need to wait for this extra one to close as well.
|
||||||
// Signal it should destroy itself right away.
|
// Signal it should destroy itself right away.
|
||||||
if (mNotified) {
|
if (mNotified) {
|
||||||
aActor->StartDestroy();
|
aActor.StartDestroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CacheWorkerRef::RemoveActor(ActorChild* aActor) {
|
void CacheWorkerRef::RemoveActor(ActorChild& aActor) {
|
||||||
NS_ASSERT_OWNINGTHREAD(CacheWorkerRef);
|
NS_ASSERT_OWNINGTHREAD(CacheWorkerRef);
|
||||||
MOZ_DIAGNOSTIC_ASSERT(aActor);
|
|
||||||
|
|
||||||
#if defined(RELEASE_OR_BETA)
|
#if defined(RELEASE_OR_BETA)
|
||||||
mActorList.RemoveElement(aActor);
|
mActorList.RemoveElement(&aActor);
|
||||||
#else
|
#else
|
||||||
MOZ_DIAGNOSTIC_ASSERT(mActorList.RemoveElement(aActor));
|
MOZ_DIAGNOSTIC_ASSERT(mActorList.RemoveElement(&aActor));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
MOZ_ASSERT(!mActorList.Contains(aActor));
|
MOZ_ASSERT(!mActorList.Contains(&aActor));
|
||||||
|
|
||||||
if (mActorList.IsEmpty()) {
|
if (mActorList.IsEmpty()) {
|
||||||
mStrongWorkerRef = nullptr;
|
mStrongWorkerRef = nullptr;
|
||||||
|
@ -135,9 +133,8 @@ void CacheWorkerRef::Notify() {
|
||||||
|
|
||||||
// Start the asynchronous destruction of our actors. These will call back
|
// Start the asynchronous destruction of our actors. These will call back
|
||||||
// into RemoveActor() once the actor is destroyed.
|
// into RemoveActor() once the actor is destroyed.
|
||||||
for (uint32_t i = 0; i < mActorList.Length(); ++i) {
|
for (const auto& actor : mActorList) {
|
||||||
MOZ_DIAGNOSTIC_ASSERT(mActorList[i]);
|
actor->StartDestroy();
|
||||||
mActorList[i]->StartDestroy();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,8 +35,8 @@ class CacheWorkerRef final : public SafeRefCounted<CacheWorkerRef> {
|
||||||
static SafeRefPtr<CacheWorkerRef> PreferBehavior(
|
static SafeRefPtr<CacheWorkerRef> PreferBehavior(
|
||||||
SafeRefPtr<CacheWorkerRef> aCurrentRef, Behavior aBehavior);
|
SafeRefPtr<CacheWorkerRef> aCurrentRef, Behavior aBehavior);
|
||||||
|
|
||||||
void AddActor(ActorChild* aActor);
|
void AddActor(ActorChild& aActor);
|
||||||
void RemoveActor(ActorChild* aActor);
|
void RemoveActor(ActorChild& aActor);
|
||||||
|
|
||||||
bool Notified() const;
|
bool Notified() const;
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ class CacheWorkerRef final : public SafeRefCounted<CacheWorkerRef> {
|
||||||
|
|
||||||
void Notify();
|
void Notify();
|
||||||
|
|
||||||
nsTArray<ActorChild*> mActorList;
|
nsTArray<NotNull<ActorChild*>> mActorList;
|
||||||
|
|
||||||
Behavior mBehavior;
|
Behavior mBehavior;
|
||||||
bool mNotified;
|
bool mNotified;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче