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
+