Skip to content

Commit 4c69156

Browse files
authored
[GEN][ZH] Add a few checks to warn of memory leaks (#1320)
1 parent 82e9c9b commit 4c69156

File tree

9 files changed

+49
-19
lines changed

9 files changed

+49
-19
lines changed

Generals/Code/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ DX8TextureCategoryClass::~DX8TextureCategoryClass()
219219
}
220220

221221
REF_PTR_RELEASE(material);
222+
223+
DEBUG_ASSERTCRASH(render_task_head == NULL, ("~DX8TextureCategoryClass: Leaking render tasks"));
222224
}
223225

224226
void DX8TextureCategoryClass::Add_Render_Task(DX8PolygonRendererClass * p_renderer,MeshClass * p_mesh)
@@ -1893,11 +1895,22 @@ void DX8TextureCategoryClass::Render(void)
18931895
}
18941896

18951897
if (!renderTasksRemaining)
1896-
{ WWASSERT(!render_task_head);
1898+
{
1899+
WWASSERT(!render_task_head);
18971900
Clear_Render_List();
18981901
}
18991902
}
19001903

1904+
void DX8TextureCategoryClass::Clear_Render_List()
1905+
{
1906+
while (render_task_head != NULL)
1907+
{
1908+
PolyRenderTaskClass* next = render_task_head->Get_Next_Visible();
1909+
delete render_task_head;
1910+
render_task_head = next;
1911+
}
1912+
}
1913+
19011914

19021915
DX8MeshRendererClass::DX8MeshRendererClass()
19031916
:
@@ -1910,11 +1923,7 @@ DX8MeshRendererClass::DX8MeshRendererClass()
19101923

19111924
DX8MeshRendererClass::~DX8MeshRendererClass()
19121925
{
1913-
Invalidate(true);
1914-
Clear_Pending_Delete_Lists();
1915-
if (texture_category_container_list_skin != NULL) {
1916-
delete texture_category_container_list_skin;
1917-
}
1926+
Shutdown();
19181927
}
19191928

19201929
void DX8MeshRendererClass::Init(void)
@@ -1924,6 +1933,8 @@ void DX8MeshRendererClass::Init(void)
19241933

19251934
void DX8MeshRendererClass::Shutdown(void)
19261935
{
1936+
camera = NULL;
1937+
visible_decal_meshes = NULL;
19271938
Invalidate(true);
19281939
Clear_Pending_Delete_Lists();
19291940
_TempVertexBuffer.Clear(); //free memory

Generals/Code/Libraries/Source/WWVegas/WW3D2/dx8renderer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class DX8TextureCategoryClass : public MultiListObjectClass
9999

100100
void Render(void);
101101
bool Anything_To_Render() { return (render_task_head != NULL); }
102-
void Clear_Render_List() { render_task_head = NULL; }
102+
void Clear_Render_List();
103103

104104
TextureClass * Peek_Texture(int stage) { return textures[stage]; }
105105
const VertexMaterialClass * Peek_Material() { return material; }

Generals/Code/Libraries/Source/WWVegas/WW3D2/hlod.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,9 @@ bool HLodDefClass::SubObjectArrayClass::Load_W3D(ChunkLoadClass & cload)
813813

814814
ModelCount = header.ModelCount;
815815
MaxScreenSize = header.MaxScreenSize;
816+
817+
DEBUG_ASSERTCRASH(ModelName == NULL, ("HLodDefClass::SubObjectArrayClass::Load_W3D: Leaking ModelName"));
818+
DEBUG_ASSERTCRASH(BoneIndex == NULL, ("HLodDefClass::SubObjectArrayClass::Load_W3D: Leaking BoneIndex"));
816819
ModelName = W3DNEWARRAY char * [ModelCount];
817820
BoneIndex = W3DNEWARRAY int [ModelCount];
818821

Generals/Code/Libraries/Source/WWVegas/WW3D2/meshgeometry.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1539,7 +1539,8 @@ void MeshGeometryClass::Generate_Culling_Tree(void)
15391539
{
15401540
AABTreeBuilderClass builder;
15411541
builder.Build_AABTree(PolyCount,Poly->Get_Array(),VertexCount,Vertex->Get_Array());
1542-
1542+
1543+
DEBUG_ASSERTCRASH(CullTree == NULL, ("MeshGeometryClass::Generate_Culling_Tree: Leaking CullTree"));
15431544
CullTree = NEW_REF(AABTreeClass,(&builder));
15441545
CullTree->Set_Mesh(this);
15451546
}

GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2260,7 +2260,7 @@ void BaseHeightMapRenderObjClass::addProp(Int id, Coord3D location, Real angle,
22602260
//=============================================================================
22612261
// BaseHeightMapRenderObjClass::removeProp
22622262
//=============================================================================
2263-
/** Adds a prop to the prop buffer.*/
2263+
/** Removes a prop from the prop buffer.*/
22642264
//=============================================================================
22652265
void BaseHeightMapRenderObjClass::removeProp(Int id)
22662266
{
@@ -2272,7 +2272,7 @@ void BaseHeightMapRenderObjClass::removeProp(Int id)
22722272
//=============================================================================
22732273
// BaseHeightMapRenderObjClass::removeAllProps
22742274
//=============================================================================
2275-
/** Adds a prop to the prop buffer.*/
2275+
/** Removes all props from the prop buffer.*/
22762276
//=============================================================================
22772277
void BaseHeightMapRenderObjClass::removeAllProps()
22782278
{

GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dx8renderer.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ DX8TextureCategoryClass::~DX8TextureCategoryClass()
222222
}
223223

224224
REF_PTR_RELEASE(material);
225+
226+
DEBUG_ASSERTCRASH(render_task_head == NULL, ("~DX8TextureCategoryClass: Leaking render tasks"));
225227
}
226228

227229
void DX8TextureCategoryClass::Add_Render_Task(DX8PolygonRendererClass * p_renderer,MeshClass * p_mesh)
@@ -1957,11 +1959,22 @@ void DX8TextureCategoryClass::Render(void)
19571959
}
19581960

19591961
if (!renderTasksRemaining)
1960-
{ WWASSERT(!render_task_head);
1962+
{
1963+
WWASSERT(!render_task_head);
19611964
Clear_Render_List();
19621965
}
19631966
}
19641967

1968+
void DX8TextureCategoryClass::Clear_Render_List()
1969+
{
1970+
while (render_task_head != NULL)
1971+
{
1972+
PolyRenderTaskClass* next = render_task_head->Get_Next_Visible();
1973+
delete render_task_head;
1974+
render_task_head = next;
1975+
}
1976+
}
1977+
19651978

19661979
DX8MeshRendererClass::DX8MeshRendererClass()
19671980
:
@@ -1974,22 +1987,20 @@ DX8MeshRendererClass::DX8MeshRendererClass()
19741987

19751988
DX8MeshRendererClass::~DX8MeshRendererClass()
19761989
{
1977-
Invalidate(true);
1978-
Clear_Pending_Delete_Lists();
1979-
if (texture_category_container_list_skin != NULL) {
1980-
delete texture_category_container_list_skin;
1981-
}
1990+
Shutdown();
19821991
}
19831992

19841993
void DX8MeshRendererClass::Init(void)
19851994
{
1986-
// DMS - Only allocate one if we havent already (leak fix)
1995+
// DMS - Only allocate one if we have not already (leak fix)
19871996
if(!texture_category_container_list_skin)
19881997
texture_category_container_list_skin = W3DNEW FVFCategoryList;
19891998
}
19901999

19912000
void DX8MeshRendererClass::Shutdown(void)
19922001
{
2002+
camera = NULL;
2003+
visible_decal_meshes = NULL;
19932004
Invalidate(true);
19942005
Clear_Pending_Delete_Lists();
19952006
_TempVertexBuffer.Clear(); //free memory

GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/dx8renderer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class DX8TextureCategoryClass : public MultiListObjectClass
101101

102102
void Render(void);
103103
bool Anything_To_Render() { return (render_task_head != NULL); }
104-
void Clear_Render_List() { render_task_head = NULL; }
104+
void Clear_Render_List();
105105

106106
TextureClass * Peek_Texture(int stage) { return textures[stage]; }
107107
const VertexMaterialClass * Peek_Material() { return material; }

GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/hlod.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,9 @@ bool HLodDefClass::SubObjectArrayClass::Load_W3D(ChunkLoadClass & cload)
813813

814814
ModelCount = header.ModelCount;
815815
MaxScreenSize = header.MaxScreenSize;
816+
817+
DEBUG_ASSERTCRASH(ModelName == NULL, ("HLodDefClass::SubObjectArrayClass::Load_W3D: Leaking ModelName"));
818+
DEBUG_ASSERTCRASH(BoneIndex == NULL, ("HLodDefClass::SubObjectArrayClass::Load_W3D: Leaking BoneIndex"));
816819
ModelName = W3DNEWARRAY char * [ModelCount];
817820
BoneIndex = W3DNEWARRAY int [ModelCount];
818821

GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/meshgeometry.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1551,7 +1551,8 @@ void MeshGeometryClass::Generate_Culling_Tree(void)
15511551
{
15521552
AABTreeBuilderClass builder;
15531553
builder.Build_AABTree(PolyCount,Poly->Get_Array(),VertexCount,Vertex->Get_Array());
1554-
1554+
1555+
DEBUG_ASSERTCRASH(CullTree == NULL, ("MeshGeometryClass::Generate_Culling_Tree: Leaking CullTree"));
15551556
CullTree = NEW_REF(AABTreeClass,(&builder));
15561557
CullTree->Set_Mesh(this);
15571558
}

0 commit comments

Comments
 (0)