diff --git a/Sources/Plasma/CoreLib/hsRefCnt.cpp b/Sources/Plasma/CoreLib/hsRefCnt.cpp index c872162c..6d5d7960 100644 --- a/Sources/Plasma/CoreLib/hsRefCnt.cpp +++ b/Sources/Plasma/CoreLib/hsRefCnt.cpp @@ -54,6 +54,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #if (REFCOUNT_DEBUGGING == REFCOUNT_DBG_LEAKS) || (REFCOUNT_DEBUGGING == REFCOUNT_DBG_ALL) #include +#include #include "plFormat.h" #include "hsWindows.h" @@ -61,12 +62,15 @@ template struct _RefCountLeakCheck { std::unordered_set<_RefType *> m_refs; - unsigned s_added, s_removed; + unsigned m_added, m_removed; + std::mutex m_mutex; ~_RefCountLeakCheck() { + std::lock_guard lock(m_mutex); + OutputDebugString(plFormat("Refs tracked: {} created, {} destroyed\n", - s_added, s_removed).c_str()); + m_added, m_removed).c_str()); if (m_refs.empty()) return; @@ -86,14 +90,16 @@ struct _RefCountLeakCheck static void add(_RefType *node) { _RefCountLeakCheck<_RefType> *p = _instance(); - ++p->s_added; + std::lock_guard lock(p->m_mutex); + ++p->m_added; p->m_refs.insert(node); } static void del(_RefType *node) { _RefCountLeakCheck<_RefType> *p = _instance(); - ++p->s_removed; + std::lock_guard lock(p->m_mutex); + ++p->m_removed; p->m_refs.erase(node); } }; diff --git a/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp b/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp index 4476780f..4e62ba27 100644 --- a/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp +++ b/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp @@ -104,7 +104,7 @@ struct RelVaultNodeLink : THashKeyVal { struct IRelVaultNode { - hsRef node; + RelVaultNode * node; // MUST be a weak ref! HASHTABLEDECL( RelVaultNodeLink,