From be44dc842e8ea9738ab5c72265a2e9d16a3e3411 Mon Sep 17 00:00:00 2001 From: prefect Date: Sun, 30 Oct 2005 21:31:10 +0000 Subject: [PATCH] Fix memory leaks in the new model code. This was SVN commit r3063. --- source/graphics/Model.cpp | 2 ++ source/renderer/ModelRenderer.cpp | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/source/graphics/Model.cpp b/source/graphics/Model.cpp index b27b377085..16b44d5fc4 100755 --- a/source/graphics/Model.cpp +++ b/source/graphics/Model.cpp @@ -63,6 +63,7 @@ void CModel::ReleaseData() delete[] m_BoneMatrices; delete[] m_InvTranspBoneMatrices; for (size_t i=0;im_Parent = 0; delete m_Props[i].m_Model; } m_Props.clear(); @@ -433,6 +434,7 @@ void CModel::RemoveProp(SPropPoint* point) for (Iter iter=m_Props.begin();iter!=m_Props.end();++iter) { const Prop& prop=*iter; if (prop.m_Point==point) { + prop.m_Model->m_Parent = 0; delete prop.m_Model; m_Props.erase(iter); return; diff --git a/source/renderer/ModelRenderer.cpp b/source/renderer/ModelRenderer.cpp index 40d6d8b3d8..dffec10b02 100644 --- a/source/renderer/ModelRenderer.cpp +++ b/source/renderer/ModelRenderer.cpp @@ -246,11 +246,11 @@ struct BMRModelDefTracker : public CModelDefRPrivate : m_ModelDef(mdef), m_Next(0), m_Slots(0) { } /// Back-link to the CModelDef object - CModelDefPtr m_ModelDef; + boost::weak_ptr m_ModelDef; /// Pointer to the next ModelDefTracker that has submitted models. BMRModelDefTracker* m_Next; - + /// Number of slots used in m_ModelSlots uint m_Slots; @@ -431,7 +431,7 @@ void BatchModelRenderer::RenderAllModels(u32 flags) for(BMRModelDefTracker* mdeftracker = m->submissions; mdeftracker; mdeftracker = mdeftracker->m_Next) { - PrepareModelDef(mdeftracker->m_ModelDef); + PrepareModelDef(mdeftracker->m_ModelDef.lock()); for(uint idx = 0; idx < mdeftracker->m_Slots; ++idx) {