diff options
author | Nicky <nicky.dasmijn@posteo.nl> | 2022-06-05 14:27:28 +0200 |
---|---|---|
committer | Nicky <nicky.dasmijn@posteo.nl> | 2022-06-05 14:27:28 +0200 |
commit | 95d5938eefa26f4814154219315db50aa511fc4f (patch) | |
tree | f4b964ee1723645d6a43668cb59b988d56523ac9 /indra/llcommon/llrefcount.h | |
parent | 6b0427dbc2e88271f7704a6c65f2bc2ea11a5928 (diff) | |
parent | 027dbc2ccfe3a94db10fc1f85f7c0ee58c4eed4f (diff) |
Merge remote-tracking branch 'origin/DRTVWR-543-maint_cmake' into DRTVWR-543-maint_cmake
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; |