[Bf-blender-cvs] [4ff3bb13e35] soc-2020-soft-body: reported mem leak in tetgen remesher but was just an malloc/free API call mistake, not a memleak. fixed.
over0219
noreply at git.blender.org
Fri Jun 12 17:03:22 CEST 2020
Commit: 4ff3bb13e35fb190c8510bf4daa7ded0a0c3b777
Author: over0219
Date: Fri Jun 12 10:03:18 2020 -0500
Branches: soc-2020-soft-body
https://developer.blender.org/rB4ff3bb13e35fb190c8510bf4daa7ded0a0c3b777
reported mem leak in tetgen remesher but was just an malloc/free API call mistake, not a memleak. fixed.
===================================================================
M intern/tetgen/tetgen_api.cpp
M source/blender/blenkernel/intern/mesh_remesh_voxel.c
M source/blender/editors/object/object_remesh.c
===================================================================
diff --git a/intern/tetgen/tetgen_api.cpp b/intern/tetgen/tetgen_api.cpp
index 16d403975a0..50b8201caac 100644
--- a/intern/tetgen/tetgen_api.cpp
+++ b/intern/tetgen/tetgen_api.cpp
@@ -110,15 +110,13 @@ bool tetgen_resmesh(TetGenRemeshData *tg)
// if (quality>0)
// switches << "q" << quality;
- char *c_switches = new char[switches.str().length()+1];
- std::strcpy(c_switches,switches.str().c_str());
tetgenio in;
make_tetgenio(tg->in_verts, tg->in_faces, tg->in_totverts, tg->in_totfaces, in);
tetgenio out;
out.initialize();
+ char *c_switches = (char *)switches.str().c_str();
tetrahedralize(c_switches, &in, &out);
- delete c_switches; // done with switches
if( out.numberoftetrahedra == 0 || out.numberofpoints == 0 )
{
diff --git a/source/blender/blenkernel/intern/mesh_remesh_voxel.c b/source/blender/blenkernel/intern/mesh_remesh_voxel.c
index 018c13b65a7..00bcf9eb8a9 100644
--- a/source/blender/blenkernel/intern/mesh_remesh_voxel.c
+++ b/source/blender/blenkernel/intern/mesh_remesh_voxel.c
@@ -309,21 +309,13 @@ static Mesh *BKE_mesh_remesh_tetgen(Mesh *input_mesh,
bool success = tetgen_resmesh(&tg);
MEM_freeN(verts);
+ verts = NULL;
+ tg.in_verts = NULL;
MEM_freeN(faces);
+ faces = NULL;
+ tg.in_faces = NULL;
MEM_freeN(verttri);
-
-{
- if (tg.out_verts)
- MEM_freeN(tg.out_verts);
-
- if (tg.out_facets)
- MEM_freeN(tg.out_facets);
-
- if (tg.out_tets)
- MEM_freeN(tg.out_tets);
-
- return NULL;
-}
+ verttri = NULL;
Mesh *mesh = NULL;
if (success)
@@ -349,20 +341,29 @@ static Mesh *BKE_mesh_remesh_tetgen(Mesh *input_mesh,
BKE_mesh_calc_normals(mesh);
*numtets = tg.out_tottets;
- //*tets = (unsigned int *)MEM_malloc_arrayN(tg.out_tottets*4, sizeof(unsigned int), "remesh_output_tets");
- *tets = (unsigned int *)malloc(tg.out_tottets*4*sizeof(unsigned int));
+ *tets = (unsigned int *)MEM_malloc_arrayN(tg.out_tottets*4, sizeof(unsigned int), "remesh_output_tets");
+ //*tets = (unsigned int *)malloc(tg.out_tottets*4*sizeof(unsigned int));
memcpy(*tets,tg.out_tets,tg.out_tottets*4*sizeof(unsigned int));
} // end success
- if (tg.out_verts)
+ if (tg.out_verts != NULL)
+ {
MEM_freeN(tg.out_verts);
+ tg.out_verts = NULL;
+ }
- if (tg.out_facets)
+ if (tg.out_facets != NULL)
+ {
MEM_freeN(tg.out_facets);
+ tg.out_facets = NULL;
+ }
- if (tg.out_tets)
+ if (tg.out_tets != NULL)
+ {
MEM_freeN(tg.out_tets);
+ tg.out_tets = NULL;
+ }
return mesh;
}
diff --git a/source/blender/editors/object/object_remesh.c b/source/blender/editors/object/object_remesh.c
index 1b0d373633c..d827f9eeac3 100644
--- a/source/blender/editors/object/object_remesh.c
+++ b/source/blender/editors/object/object_remesh.c
@@ -1188,7 +1188,7 @@ static int tetgen_remesh_exec(bContext *C, wmOperator *op)
Mesh *mesh = ob->data;
Mesh *new_mesh = NULL;
- unsigned int *tets;
+ unsigned int *tets = NULL;
int numtets;
new_mesh = BKE_mesh_remesh_tetgen_to_mesh_nomain(mesh,&tets,&numtets);
if (tets) {
More information about the Bf-blender-cvs
mailing list