[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60195] branches/ soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c : code rewrite: transfer by topology: Bugfixes for memory allocation and handling memory leaks

Walid Shouman eng.walidshouman at gmail.com
Tue Sep 17 13:37:09 CEST 2013


Revision: 60195
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60195
Author:   walid
Date:     2013-09-17 11:37:09 +0000 (Tue, 17 Sep 2013)
Log Message:
-----------
code rewrite: transfer by topology: Bugfixes for memory allocation and handling memory leaks

Modified Paths:
--------------
    branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c

Modified: branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c
===================================================================
--- branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c	2013-09-17 11:01:52 UTC (rev 60194)
+++ branches/soc-2013-meshdata_transfer/source/blender/bmesh/tools/bmesh_data_transfer.c	2013-09-17 11:37:09 UTC (rev 60195)
@@ -263,6 +263,7 @@
 			BMElem *ele_dst = array_dst[i];
 
 			if (layer_type == CD_MDEFORMVERT) {
+				//all vertex groups will be copied as they are found in a single CD_layer
 				ptr = CustomData_bmesh_get(cd_src, ele_src->head.data, layer_type);
 				CustomData_bmesh_set(cd_dst, ele_dst->head.data, layer_type, ptr);
 			}
@@ -307,6 +308,7 @@
 			ele_dst = array_dst[i];
 
 			if (layer_type == CD_MDEFORMVERT) {
+				//all vertex groups will be copied as they are found in a single CD_layer
 				ptr = CustomData_bmesh_get(cd_src, ele_src->head.data, layer_type);
 				CustomData_bmesh_set(cd_dst, ele_dst->head.data, layer_type, ptr);
 
@@ -469,6 +471,10 @@
 
 	BM_mesh_cd_transfer_mapped(cd_src, array_src, array_src_len, cd_dst, array_dst, array_dst_len, layer_type, replace_info,
 	                           index_mapping);
+
+	MEM_freeN(array_dst);
+	MEM_freeN(array_src);
+	MEM_freeN(index_mapping);
 }
 
 void *BM_mesh_mapping(BMesh *bm_src, BMesh *bm_dst, const char htype)
@@ -491,9 +497,8 @@
 
 	switch (htype) {
 		case BM_VERT:
-			index_mapping = MEM_mallocN(bm_dst->totvert, "index_mapping bmesh_data_transfer.c");
-///			BM_ITER_MESH_INDEX (v_dst, &iter, bm_dst, BM_VERTS_OF_MESH, a) {
-			for (v_dst = BM_iter_new(&iter, bm_dst, BM_VERTS_OF_MESH, NULL), a = 0; v_dst; v_dst = BM_iter_step(&iter), (a)++) {
+			index_mapping = MEM_mallocN(bm_dst->totvert * sizeof(*index_mapping), "index_mapping bmesh_data_transfer.c");
+			BM_ITER_MESH_INDEX (v_dst, &iter, bm_dst, BM_VERTS_OF_MESH, a) {
 
 				v_src = BKE_bmbvh_find_vert_closest(bmtree_src, v_dst->co, FLT_MAX);
 				if (v_src != NULL) {
@@ -507,7 +512,7 @@
 
 			break;
 		case BM_LOOP:
-			index_mapping = MEM_mallocN(bm_dst->totloop, "index_mapping bmesh_data_transfer.c");
+			index_mapping = MEM_mallocN(bm_dst->totloop * sizeof(*index_mapping), "index_mapping bmesh_data_transfer.c");
 
 			BM_ITER_MESH_INDEX (f_dst, &fiter, bm_dst, BM_FACES_OF_MESH, a) {
 
@@ -530,15 +535,16 @@
 
 			break;
 		default:
-			///raises an error!
-//			BKE_bmbvh_free(bmtree_src);
+			BKE_bmbvh_free(bmtree_src);
+			MEM_freeN(em_src);
 			return false;
 			//break;
 	}
 
-///raises an error!
-//	BKE_bmbvh_free(bmtree_src);
 
+	BKE_bmbvh_free(bmtree_src);
+	MEM_freeN(em_src);
+
 	return index_mapping;
 }
 




More information about the Bf-blender-cvs mailing list