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;
 }
 

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to