[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