qbsp: clean up brush memory leaks
This commit is contained in:
parent
7c49d499c2
commit
b38c04b372
|
|
@ -53,4 +53,6 @@ vec_t BrushVolume (const brush_t *brush);
|
||||||
int BrushMostlyOnSide (const brush_t *brush, const vec3_t normal, vec_t dist);
|
int BrushMostlyOnSide (const brush_t *brush, const vec3_t normal, vec_t dist);
|
||||||
void SplitBrush (const brush_t *brush, int planenum, int planeside, brush_t **front, brush_t **back);
|
void SplitBrush (const brush_t *brush, int planenum, int planeside, brush_t **front, brush_t **back);
|
||||||
|
|
||||||
|
void FreeBrush(brush_t *brush);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -514,8 +514,7 @@ FreeBrushes(mapentity_t *ent)
|
||||||
|
|
||||||
for (brush = ent->brushes; brush; brush = next) {
|
for (brush = ent->brushes; brush; brush = next) {
|
||||||
next = brush->next;
|
next = brush->next;
|
||||||
FreeBrushFaces(brush->faces);
|
FreeBrush(brush);
|
||||||
FreeMem(brush, BRUSH, 1);
|
|
||||||
}
|
}
|
||||||
ent->brushes = nullptr;
|
ent->brushes = nullptr;
|
||||||
}
|
}
|
||||||
|
|
@ -528,7 +527,7 @@ FreeBrush
|
||||||
void
|
void
|
||||||
FreeBrush(brush_t *brush)
|
FreeBrush(brush_t *brush)
|
||||||
{
|
{
|
||||||
Q_assert(brush->next == nullptr);
|
FreeBrushFaces(brush->faces);
|
||||||
FreeMem(brush, BRUSH, 1);
|
FreeMem(brush, BRUSH, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1076,7 +1075,7 @@ Brush_LoadEntity(mapentity_t *dst, const mapentity_t *src, const int hullnum)
|
||||||
VectorCopy(origin, rotate_offset);
|
VectorCopy(origin, rotate_offset);
|
||||||
usesOriginBrush = true;
|
usesOriginBrush = true;
|
||||||
|
|
||||||
FreeMem(brush, BRUSH, 1);
|
FreeBrush(brush);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1164,8 +1163,7 @@ Brush_LoadEntity(mapentity_t *dst, const mapentity_t *src, const int hullnum)
|
||||||
if (brush) {
|
if (brush) {
|
||||||
AddToBounds(dst, brush->mins);
|
AddToBounds(dst, brush->mins);
|
||||||
AddToBounds(dst, brush->maxs);
|
AddToBounds(dst, brush->maxs);
|
||||||
FreeBrushFaces(brush->faces);
|
FreeBrush(brush);
|
||||||
FreeMem(brush, BRUSH, 1);
|
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -1572,6 +1570,11 @@ void SplitBrush (const brush_t *brush,
|
||||||
newface->next = b[j]->faces;
|
newface->next = b[j]->faces;
|
||||||
b[j]->faces = newface;
|
b[j]->faces = newface;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cw[0])
|
||||||
|
FreeMem(cw[0], WINDING, 1);
|
||||||
|
if (cw[1])
|
||||||
|
FreeMem(cw[1], WINDING, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1651,7 +1654,7 @@ void SplitBrush (const brush_t *brush,
|
||||||
v1 = BrushVolume (b[i]);
|
v1 = BrushVolume (b[i]);
|
||||||
if (v1 < 1.0)
|
if (v1 < 1.0)
|
||||||
{
|
{
|
||||||
FreeMem (b[i], BRUSH, 1);
|
FreeBrush(b[i]);
|
||||||
b[i] = nullptr;
|
b[i] = nullptr;
|
||||||
logprint ("tiny volume after clip\n");
|
logprint ("tiny volume after clip\n");
|
||||||
}
|
}
|
||||||
|
|
@ -1660,5 +1663,7 @@ void SplitBrush (const brush_t *brush,
|
||||||
|
|
||||||
*front = b[0];
|
*front = b[0];
|
||||||
*back = b[1];
|
*back = b[1];
|
||||||
|
|
||||||
|
FreeMem(midwinding, WINDING, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ TEST(qbsp, duplicatePlanes) {
|
||||||
brush_t *brush = LoadBrush(&worldspawn.mapbrush(0), vec3_origin, 0);
|
brush_t *brush = LoadBrush(&worldspawn.mapbrush(0), vec3_origin, 0);
|
||||||
ASSERT_NE(nullptr, brush);
|
ASSERT_NE(nullptr, brush);
|
||||||
EXPECT_EQ(6, Brush_NumFaces(brush));
|
EXPECT_EQ(6, Brush_NumFaces(brush));
|
||||||
FreeMem(brush, BRUSH, 1);
|
FreeBrush(brush);
|
||||||
}
|
}
|
||||||
|
|
||||||
static brush_t *load128x128x32Brush()
|
static brush_t *load128x128x32Brush()
|
||||||
|
|
@ -163,7 +163,7 @@ TEST(qbsp, BrushMostlyOnSide1) {
|
||||||
|
|
||||||
EXPECT_EQ(SIDE_FRONT, BrushMostlyOnSide(brush, plane1normal, plane1dist));
|
EXPECT_EQ(SIDE_FRONT, BrushMostlyOnSide(brush, plane1normal, plane1dist));
|
||||||
|
|
||||||
FreeMem(brush, BRUSH, 1);
|
FreeBrush(brush);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(qbsp, BrushMostlyOnSide2) {
|
TEST(qbsp, BrushMostlyOnSide2) {
|
||||||
|
|
@ -174,7 +174,7 @@ TEST(qbsp, BrushMostlyOnSide2) {
|
||||||
|
|
||||||
EXPECT_EQ(SIDE_BACK, BrushMostlyOnSide(brush, plane1normal, plane1dist));
|
EXPECT_EQ(SIDE_BACK, BrushMostlyOnSide(brush, plane1normal, plane1dist));
|
||||||
|
|
||||||
FreeMem(brush, BRUSH, 1);
|
FreeBrush(brush);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(qbsp, BoundBrush) {
|
TEST(qbsp, BoundBrush) {
|
||||||
|
|
@ -192,7 +192,7 @@ TEST(qbsp, BoundBrush) {
|
||||||
EXPECT_FLOAT_EQ(64, brush->maxs[1]);
|
EXPECT_FLOAT_EQ(64, brush->maxs[1]);
|
||||||
EXPECT_FLOAT_EQ(16, brush->maxs[2]);
|
EXPECT_FLOAT_EQ(16, brush->maxs[2]);
|
||||||
|
|
||||||
FreeMem(brush, BRUSH, 1);
|
FreeBrush(brush);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void checkForAllCubeNormals(const brush_t *brush)
|
static void checkForAllCubeNormals(const brush_t *brush)
|
||||||
|
|
@ -268,7 +268,7 @@ TEST(qbsp, SplitBrush) {
|
||||||
|
|
||||||
checkCube(back);
|
checkCube(back);
|
||||||
|
|
||||||
FreeMem(brush, BRUSH, 1);
|
FreeBrush(brush);
|
||||||
FreeMem(front, BRUSH, 1);
|
FreeMem(front, BRUSH, 1);
|
||||||
FreeMem(back, BRUSH, 1);
|
FreeMem(back, BRUSH, 1);
|
||||||
}
|
}
|
||||||
|
|
@ -289,6 +289,24 @@ TEST(qbsp, SplitBrushOnSide) {
|
||||||
EXPECT_EQ(nullptr, back);
|
EXPECT_EQ(nullptr, back);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
TEST(qbsp, MemLeaks) {
|
||||||
|
brush_t *brush = load128x128x32Brush();
|
||||||
|
|
||||||
|
const vec3_t planenormal = { -1, 0, 0 };
|
||||||
|
int planeside;
|
||||||
|
const int planenum = FindPlane(planenormal, 0.0, &planeside);
|
||||||
|
|
||||||
|
for (int i=0; i<1000000; i++) {
|
||||||
|
brush_t *front, *back;
|
||||||
|
SplitBrush(brush, planenum, planeside, &front, &back);
|
||||||
|
|
||||||
|
FreeBrush(front);
|
||||||
|
FreeBrush(back);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST(mathlib, WindingArea) {
|
TEST(mathlib, WindingArea) {
|
||||||
winding_t w;
|
winding_t w;
|
||||||
w.numpoints = 5;
|
w.numpoints = 5;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue