From dc9798d4554ba47115322ad1b5ec36d43ec6e01d Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sat, 28 May 2022 16:28:26 +0200 Subject: [PATCH] Add KeyValue leak tracing CUtlVector has to be rebuild for this to work --- r5dev/vpc/kvleaktrace.h | 62 +++++++++++++++++++++++++++ r5dev/vproj/clientsdk.vcxproj | 1 + r5dev/vproj/clientsdk.vcxproj.filters | 3 ++ r5dev/vproj/dedicated.vcxproj | 1 + r5dev/vproj/dedicated.vcxproj.filters | 3 ++ r5dev/vproj/gamesdk.vcxproj | 1 + r5dev/vproj/gamesdk.vcxproj.filters | 3 ++ 7 files changed, 74 insertions(+) create mode 100644 r5dev/vpc/kvleaktrace.h diff --git a/r5dev/vpc/kvleaktrace.h b/r5dev/vpc/kvleaktrace.h new file mode 100644 index 00000000..8ea3c8df --- /dev/null +++ b/r5dev/vpc/kvleaktrace.h @@ -0,0 +1,62 @@ +#ifndef KVLEAKTRACE_H +#define KVLEAKTRACE_H +#include "tier1/utlvector.h" + +#ifdef LEAKTRACK +class CLeakTrack +{ +public: + CLeakTrack() + { + } + ~CLeakTrack() + { + if (keys.Count() != 0) + { + Assert(0); + } + } + + struct kve + { + KeyValues* kv; + char name[256]; + }; + + void AddKv(KeyValues* kv, char const* name) + { + kve k; + strncpy(k.name, name ? name : "NULL", sizeof(k.name)); + k.kv = kv; + + keys.AddToTail(k); + } + + void RemoveKv(KeyValues* kv) + { + int c = keys.Count(); + for (int i = 0; i < c; i++) + { + if (keys[i].kv == kv) + { + keys.Remove(i); + break; + } + } + } + + CUtlVector< kve > keys; +}; + +static CLeakTrack track; + +#define TRACK_KV_ADD( ptr, name ) track.AddKv( ptr, name ) +#define TRACK_KV_REMOVE( ptr ) track.RemoveKv( ptr ) + +#else + +#define TRACK_KV_ADD( ptr, name ) +#define TRACK_KV_REMOVE( ptr ) + +#endif +#endif // KVLEAKTRACE_H \ No newline at end of file diff --git a/r5dev/vproj/clientsdk.vcxproj b/r5dev/vproj/clientsdk.vcxproj index f1b3c915..c492f601 100644 --- a/r5dev/vproj/clientsdk.vcxproj +++ b/r5dev/vproj/clientsdk.vcxproj @@ -440,6 +440,7 @@ + diff --git a/r5dev/vproj/clientsdk.vcxproj.filters b/r5dev/vproj/clientsdk.vcxproj.filters index 369310a8..3ad1cdc8 100644 --- a/r5dev/vproj/clientsdk.vcxproj.filters +++ b/r5dev/vproj/clientsdk.vcxproj.filters @@ -1499,6 +1499,9 @@ sdk\tier1 + + sdk\vpc + diff --git a/r5dev/vproj/dedicated.vcxproj b/r5dev/vproj/dedicated.vcxproj index 10266a46..a1131d44 100644 --- a/r5dev/vproj/dedicated.vcxproj +++ b/r5dev/vproj/dedicated.vcxproj @@ -423,6 +423,7 @@ + diff --git a/r5dev/vproj/dedicated.vcxproj.filters b/r5dev/vproj/dedicated.vcxproj.filters index 375782d4..b57f4391 100644 --- a/r5dev/vproj/dedicated.vcxproj.filters +++ b/r5dev/vproj/dedicated.vcxproj.filters @@ -1113,6 +1113,9 @@ sdk\tier1 + + sdk\vpc + diff --git a/r5dev/vproj/gamesdk.vcxproj b/r5dev/vproj/gamesdk.vcxproj index 91285380..5da19128 100644 --- a/r5dev/vproj/gamesdk.vcxproj +++ b/r5dev/vproj/gamesdk.vcxproj @@ -458,6 +458,7 @@ + diff --git a/r5dev/vproj/gamesdk.vcxproj.filters b/r5dev/vproj/gamesdk.vcxproj.filters index 1282356a..238f3ad3 100644 --- a/r5dev/vproj/gamesdk.vcxproj.filters +++ b/r5dev/vproj/gamesdk.vcxproj.filters @@ -1562,6 +1562,9 @@ sdk\tier0 + + sdk\vpc +