diff options
author | Kitty Barnett <develop@catznip.com> | 2023-01-02 23:04:02 +0100 |
---|---|---|
committer | Kitty Barnett <develop@catznip.com> | 2023-01-02 23:04:42 +0100 |
commit | 6850b915fe42f5a75fc9d8bb9ca05f961de3244a (patch) | |
tree | 0921b5e0c74a64ad65d1b5702b00142badb6140c /indra/llcommon/llrefcount.h | |
parent | 89456ec88df01565e2c9a424a0097a5a02e1838c (diff) | |
parent | f3f3c493ec2a658cf5c1aac6670c54c550e944fd (diff) |
Merge branch 'master' into texture-preview
Diffstat (limited to 'indra/llcommon/llrefcount.h')
-rw-r--r-- | indra/llcommon/llrefcount.h | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/indra/llcommon/llrefcount.h b/indra/llcommon/llrefcount.h index 7e4af6ea66..2080da1565 100644 --- a/indra/llcommon/llrefcount.h +++ b/indra/llcommon/llrefcount.h @@ -37,6 +37,10 @@ class LLMutex; // see llthread.h for LLThreadSafeRefCount //---------------------------------------------------------------------------- +//nonsense but recognizable value for freed LLRefCount (aids in debugging) +#define LL_REFCOUNT_FREE 1234567890 +extern const S32 gMaxRefCount; + class LL_COMMON_API LLRefCount { protected: @@ -47,17 +51,25 @@ protected: public: LLRefCount(); + inline void validateRefCount() const + { + llassert(mRef > 0); // ref count below 0, likely corrupted + llassert(mRef < gMaxRefCount); // ref count excessive, likely memory leak + } + inline void ref() const { mRef++; + validateRefCount(); } inline S32 unref() const { - llassert(mRef >= 1); + validateRefCount(); if (0 == --mRef) { - delete this; + mRef = LL_REFCOUNT_FREE; // set to nonsense yet recognizable value to aid in debugging + delete this; return 0; } return mRef; |