diff options
author | Sergeanur <s.anureev@yandex.ua> | 2020-01-23 20:08:42 +0200 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2020-01-23 20:08:42 +0200 |
commit | b06ad84768e314eb20327ec7ec8200da292dd55c (patch) | |
tree | de2377a69be92fa20ef791b10aef5a217be02588 | |
parent | 18f80a02fcb35e42874ebdd91eea3286120c8afc (diff) |
Fixing possible leaks in CModelInfo::ShutDown
-rw-r--r-- | src/core/Instance.cpp | 7 | ||||
-rw-r--r-- | src/core/Instance.h | 1 | ||||
-rw-r--r-- | 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* |