[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23028] branches/bmesh/blender/source/ blender: miscelleneous bug fixes and mem leak fixes

Joseph Eagar joeedh at gmail.com
Sun Sep 6 08:47:59 CEST 2009


Revision: 23028
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23028
Author:   joeedh
Date:     2009-09-06 08:47:59 +0200 (Sun, 06 Sep 2009)

Log Message:
-----------
miscelleneous bug fixes and mem leak fixes

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/bmesh/blender/source/blender/blenlib/intern/BLI_ghash.c
    branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h	2009-09-06 02:43:36 UTC (rev 23027)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h	2009-09-06 06:47:59 UTC (rev 23028)
@@ -47,6 +47,9 @@
 struct DerivedMesh *CDDM_new(int numVerts, int numEdges, int numFaces,
                              int numLoops, int numPolys);
 
+/*tests if a given DerivedMesh is a CDDM*/
+int CDDM_Check(struct DerivedMesh *dm);
+
 /* creates a CDDerivedMesh from the given Mesh, this will reference the
    original data in Mesh, but it is safe to apply vertex coordinates or
    calculate normals as those functions will automtically create new

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-09-06 02:43:36 UTC (rev 23027)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-09-06 06:47:59 UTC (rev 23028)
@@ -837,6 +837,11 @@
 		MEM_freeN(cddm);
 }
 
+int CDDM_Check(DerivedMesh *dm)
+{
+	return dm && dm->getMinMax == cdDM_getMinMax;
+}
+
 /**************** CDDM interface functions ****************/
 static CDDerivedMesh *cdDM_create(const char *desc)
 {

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2009-09-06 02:43:36 UTC (rev 23027)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2009-09-06 06:47:59 UTC (rev 23028)
@@ -84,6 +84,8 @@
 	BM_Free_Mesh(me->edit_btmesh->bm);
 	me->edit_btmesh->bm = editmesh_to_bmesh(em);
 	BMEdit_RecalcTesselation(me->edit_btmesh);
+	free_editMesh(em);
+	MEM_freeN(em);
 }
 
 static void mesh_ensure_tesselation_customdata(Mesh *me)

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2009-09-06 02:43:36 UTC (rev 23027)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2009-09-06 06:47:59 UTC (rev 23028)
@@ -3270,7 +3270,21 @@
                         int useRenderParams, float (*vertCos)[3],
                         int isFinalCalc, int editMode)
 {
-	return subsurf_make_derived_from_derived_with_multires(dm, smd, NULL, useRenderParams, vertCos, isFinalCalc, editMode);
+	DerivedMesh *cddm = NULL, *result;
+
+	if (!CDDM_Check(dm)) {
+		cddm = CDDM_copy(dm);
+		dm = cddm;
+	}
+
+	result = subsurf_make_derived_from_derived_with_multires(dm, smd, NULL, useRenderParams, vertCos, isFinalCalc, editMode);
+
+	if (cddm) {
+		cddm->needsFree = 1;
+		cddm->release(cddm);
+	}
+
+	return result;
 }
 
 void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3]) 

Modified: branches/bmesh/blender/source/blender/blenlib/intern/BLI_ghash.c
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/intern/BLI_ghash.c	2009-09-06 02:43:36 UTC (rev 23027)
+++ branches/bmesh/blender/source/blender/blenlib/intern/BLI_ghash.c	2009-09-06 06:47:59 UTC (rev 23028)
@@ -170,16 +170,18 @@
 void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp) {
 	int i;
 	
-	for (i=0; i<gh->nbuckets; i++) {
-		Entry *e;
-		
-		for (e= gh->buckets[i]; e; ) {
-			Entry *n= e->next;
+	if (keyfreefp || valfreefp) {
+		for (i=0; i<gh->nbuckets; i++) {
+			Entry *e;
 			
-			if (keyfreefp) keyfreefp(e->key);
-			if (valfreefp) valfreefp(e->val);
+			for (e= gh->buckets[i]; e; ) {
+				Entry *n= e->next;
+				
+				if (keyfreefp) keyfreefp(e->key);
+				if (valfreefp) valfreefp(e->val);
 
-			e= n;
+				e= n;
+			}
 		}
 	}
 	

Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2009-09-06 02:43:36 UTC (rev 23027)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2009-09-06 06:47:59 UTC (rev 23028)
@@ -45,7 +45,7 @@
 	MLoop *ml;
 	MPoly *mpoly;
 	BMVert *v, **vt=NULL;
-	BMEdge *e, **fedges=NULL, **et;
+	BMEdge *e, **fedges=NULL, **et = NULL;
 	V_DECLARE(fedges);
 	BMFace *f;
 	int i, j, li, allocsize[4] = {512, 512, 2048, 512};
@@ -85,7 +85,10 @@
 		CustomData_to_bmesh_block(&me->vdata, &bm->vdata, i, &v->head.data);
 	}
 
-	if (!me->totedge) return;
+	if (!me->totedge) {
+		MEM_freeN(vt);
+		return;
+	}
 
 	et = MEM_mallocN(sizeof(void**)*me->totedge, "mesh to bmesh etable");
 
@@ -107,7 +110,11 @@
 		if (e->head.flag & BM_SELECT) BM_Select(bm, e, 1);
 	}
 	
-	if (!me->totpoly) return;
+	if (!me->totpoly) {
+		MEM_freeN(vt);
+		MEM_freeN(et);
+		return;
+	}
 
 	mpoly = me->mpoly;
 	li = 0;
@@ -158,6 +165,9 @@
 	}
 
 	V_FREE(fedges);
+
+	MEM_freeN(vt);
+	MEM_freeN(et);
 }
 
 





More information about the Bf-blender-cvs mailing list