mirror of
https://github.com/roytam1/basilisk55.git
synced 2026-05-26 15:02:46 +00:00
import from UXP: Issue #2928 - Add extra checks to nsExpirationTracker. (e99ed753)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user