import from UXP: Issue #2928 - Add extra checks to nsExpirationTracker. (e99ed753)

This commit is contained in:
2026-02-07 22:12:50 +08:00
parent daa9648aaa
commit 9c328ddf41
+18 -3
View File
@@ -128,9 +128,15 @@ public:
*/
nsresult AddObjectLocked(T* aObj, const AutoLock& aAutoLock)
{
if (NS_WARN_IF(!aObj)) {
// Invalid object to add
return NS_ERROR_UNEXPECTED;
}
nsExpirationState* state = aObj->GetExpirationState();
NS_ASSERTION(!state->IsTracked(),
"Tried to add an object that's already tracked");
if (NS_WARN_IF(state->IsTracked())) {
// Tried to add an object that's already tracked.
return NS_ERROR_UNEXPECTED;
}
nsTArray<T*>& generation = mGenerations[mNewestGeneration];
uint32_t index = generation.Length();
if (index > nsExpirationState::MAX_INDEX_IN_GENERATION) {
@@ -157,8 +163,15 @@ public:
*/
void RemoveObjectLocked(T* aObj, const AutoLock& aAutoLock)
{
if (NS_WARN_IF(!aObj)) {
// Invalid object to remove
return;
}
nsExpirationState* state = aObj->GetExpirationState();
NS_ASSERTION(state->IsTracked(), "Tried to remove an object that's not tracked");
if (NS_WARN_IF(!state->IsTracked())) {
// Tried to remove an object that's not tracked
return;
}
nsTArray<T*>& generation = mGenerations[state->mGeneration];
uint32_t index = state->mIndexInGeneration;
NS_ASSERTION(generation.Length() > index &&
@@ -459,11 +472,13 @@ class nsExpirationTracker : protected ::detail::SingleThreadedExpirationTracker<
Lock mLock;
AutoLock FakeLock() {
MOZ_DIAGNOSTIC_ASSERT(NS_IsMainThread());
return AutoLock(mLock);
}
Lock& GetMutex() override
{
MOZ_DIAGNOSTIC_ASSERT(NS_IsMainThread());
return mLock;
}