From b06ad84768e314eb20327ec7ec8200da292dd55c Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Thu, 23 Jan 2020 20:08:42 +0200 Subject: [PATCH] Fixing possible leaks in CModelInfo::ShutDown --- src/core/Instance.cpp | 7 +++++++ src/core/Instance.h | 1 + src/modelinfo/ModelInfo.cpp | 20 ++++++++++++++++++-- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/core/Instance.cpp b/src/core/Instance.cpp index 5426605f..775341be 100644 --- a/src/core/Instance.cpp +++ b/src/core/Instance.cpp @@ -2,6 +2,12 @@ #include "patcher.h" #include "Instance.h" +void +CInstance::Shutdown() +{ + GetMatrix().Detach(); +} + class CInstance_ : public CInstance { public: @@ -10,4 +16,5 @@ public: STARTPATCHES InjectHook(0x50BE90, &CInstance_::dtor, PATCH_JUMP); + InjectHook(0x50B850, &CInstance::Shutdown, PATCH_JUMP); ENDPATCHES diff --git a/src/core/Instance.h b/src/core/Instance.h index 4a7f9aa9..01dfb6a2 100644 --- a/src/core/Instance.h +++ b/src/core/Instance.h @@ -10,4 +10,5 @@ public: int m_modelIndex; public: ~CInstance() = default; + void Shutdown(); }; diff --git a/src/modelinfo/ModelInfo.cpp b/src/modelinfo/ModelInfo.cpp index a3c1412d..d956abaa 100644 --- a/src/modelinfo/ModelInfo.cpp +++ b/src/modelinfo/ModelInfo.cpp @@ -93,16 +93,32 @@ CModelInfo::ShutDown(void) int i; for(i = 0; i < ms_simpleModelStore.allocPtr; i++) ms_simpleModelStore.store[i].Shutdown(); + for(i = 0; i < ms_mloInstanceStore.allocPtr; i++) + ms_mloInstanceStore.store[i].Shutdown(); for(i = 0; i < ms_timeModelStore.allocPtr; i++) ms_timeModelStore.store[i].Shutdown(); for(i = 0; i < ms_clumpModelStore.allocPtr; i++) ms_clumpModelStore.store[i].Shutdown(); - for(i = 0; i < ms_pedModelStore.allocPtr; i++) - ms_pedModelStore.store[i].Shutdown(); for(i = 0; i < ms_vehicleModelStore.allocPtr; i++) ms_vehicleModelStore.store[i].Shutdown(); + for(i = 0; i < ms_pedModelStore.allocPtr; i++) + ms_pedModelStore.store[i].Shutdown(); + for(i = 0; i < ms_xtraCompsModelStore.allocPtr; i++) + ms_xtraCompsModelStore.store[i].Shutdown(); + for(i = 0; i < ms_mloInstanceStore.allocPtr; i++) + ms_mloInstanceStore.store[i].Shutdown(); for(i = 0; i < ms_2dEffectStore.allocPtr; i++) ms_2dEffectStore.store[i].Shutdown(); + + ms_2dEffectStore.clear(); + ms_simpleModelStore.clear(); + ms_mloInstanceStore.clear(); + ms_mloModelStore.clear(); + ms_xtraCompsModelStore.clear(); + ms_timeModelStore.clear(); + ms_pedModelStore.clear(); + ms_clumpModelStore.clear(); + ms_vehicleModelStore.clear(); } CSimpleModelInfo*