From 7555264d4e87cd6326f5bc1ccbd08cce9f8e162e Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sat, 6 May 2023 17:49:13 +0200 Subject: [PATCH] Add RSON free Cleanup RSON memory. --- r5dev/vpc/rson.h | 16 +++++++++++----- .../vscript/languages/squirrel_re/vsquirrel.cpp | 6 +++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/r5dev/vpc/rson.h b/r5dev/vpc/rson.h index 1ada8279..2260af43 100644 --- a/r5dev/vpc/rson.h +++ b/r5dev/vpc/rson.h @@ -1,5 +1,6 @@ #pragma once #include "mathlib/color.h" +#include "tier0/tslist.h" #include "tier1/utlbuffer.h" #include "public/ifilesystem.h" #include "filesystem/filesystem.h" @@ -80,25 +81,30 @@ public: public: static Node_t* LoadFromBuffer(const char* pszBufferName, char* pBuffer, eFieldType rootType); - static Node_t* LoadFromFile(const char* pszFilePath); }; /////////////////////////////////////////////////////////////////////////////// inline CMemory p_RSON_LoadFromBuffer; -inline auto RSON_LoadFromBuffer = p_RSON_LoadFromBuffer.RCast(); +inline auto RSON_LoadFromBuffer = p_RSON_LoadFromBuffer.RCast(); + +inline CMemory p_RSON_Free; +inline auto RSON_Free = p_RSON_Free.RCast(); /////////////////////////////////////////////////////////////////////////////// class VRSON : public IDetour { virtual void GetAdr(void) const { - + LogFunAdr("RSON_LoadFromBuffer", p_RSON_LoadFromBuffer.GetPtr()); + LogFunAdr("RSON_Free", p_RSON_Free.GetPtr()); } virtual void GetFun(void) const { - p_RSON_LoadFromBuffer = g_GameDll.FindPatternSIMD("E8 ? ? ? ? 48 89 45 60 48 8B D8").FollowNearCallSelf(); - + p_RSON_LoadFromBuffer = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 48 89 45 60 48 8B D8").FollowNearCallSelf(); RSON_LoadFromBuffer = p_RSON_LoadFromBuffer.RCast< RSON::Node_t * (__fastcall*)(const char* bufName, char* buf, RSON::eFieldType rootType, __int64 a4, void* a5)>(); + + p_RSON_Free = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 48 83 EF 01 75 E7").FollowNearCallSelf(); + RSON_Free = p_RSON_Free.RCast(); } virtual void GetVar(void) const { } virtual void GetCon(void) const { } diff --git a/r5dev/vscript/languages/squirrel_re/vsquirrel.cpp b/r5dev/vscript/languages/squirrel_re/vsquirrel.cpp index 0264f1b2..19003c54 100644 --- a/r5dev/vscript/languages/squirrel_re/vsquirrel.cpp +++ b/r5dev/vscript/languages/squirrel_re/vsquirrel.cpp @@ -190,7 +190,11 @@ void CSquirrelVM::CompileModScripts() } } - // TODO[rexx]: clean up allocated RSON memory. example @ 1408B18E2 + if (rson) + { + RSON_Free(rson, g_pAlignedMemAlloc); + g_pAlignedMemAlloc->Free(rson); + } } }