diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-07-23 22:04:33 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-07-23 22:04:33 +0300 |
commit | 36630b7e854ba69520aab9be411361589eb3ce83 (patch) | |
tree | 150e1ff0ffaa0eff5051ec43d105245b06adcc22 /source/blender/blenkernel | |
parent | d47e565598f41ad9571e7ce112caaf9f776c0647 (diff) |
Fix memory leaks mesh w/ mesh remapping
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/intern/mesh_mapping.c | 18 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh_remap.c | 12 |
2 files changed, 28 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/mesh_mapping.c b/source/blender/blenkernel/intern/mesh_mapping.c index c03f1feef9c..ef9136397fa 100644 --- a/source/blender/blenkernel/intern/mesh_mapping.c +++ b/source/blender/blenkernel/intern/mesh_mapping.c @@ -797,8 +797,8 @@ bool BKE_mesh_calc_islands_loop_poly_uv( /* Those are used to detect 'inner cuts', i.e. edges that are borders, and yet have two or more polys of * a same group using them (typical case: seam used to unwrap properly a cylinder). */ - BLI_bitmap *edge_borders; - int num_edge_borders; + BLI_bitmap *edge_borders = NULL; + int num_edge_borders = 0; char *edge_border_count = NULL; int *edge_innercut_indices = NULL; int num_einnercuts = 0; @@ -817,6 +817,12 @@ bool BKE_mesh_calc_islands_loop_poly_uv( if (!num_poly_groups) { /* Should never happen... */ + MEM_freeN(edge_poly_map); + MEM_freeN(edge_poly_mem); + + if (edge_borders) { + MEM_freeN(edge_borders); + } return false; } @@ -861,9 +867,17 @@ bool BKE_mesh_calc_islands_loop_poly_uv( num_einnercuts, edge_innercut_indices); } + MEM_freeN(edge_poly_map); + MEM_freeN(edge_poly_mem); + MEM_freeN(poly_indices); MEM_freeN(loop_indices); MEM_freeN(poly_groups); + + if (edge_borders) { + MEM_freeN(edge_borders); + } + if (num_edge_borders) { MEM_freeN(edge_border_count); MEM_freeN(edge_innercut_indices); diff --git a/source/blender/blenkernel/intern/mesh_remap.c b/source/blender/blenkernel/intern/mesh_remap.c index ec8b3627321..978ea37a8cc 100644 --- a/source/blender/blenkernel/intern/mesh_remap.c +++ b/source/blender/blenkernel/intern/mesh_remap.c @@ -1933,15 +1933,27 @@ void BKE_mesh_remap_calc_loops_from_dm( if (looptri_allocated_src) { MEM_freeN((void *)looptri_src); } + if (vert_to_loop_map_src) { + MEM_freeN(vert_to_loop_map_src); + } if (vert_to_loop_map_src_buff) { MEM_freeN(vert_to_loop_map_src_buff); } + if (vert_to_poly_map_src) { + MEM_freeN(vert_to_poly_map_src); + } if (vert_to_poly_map_src_buff) { MEM_freeN(vert_to_poly_map_src_buff); } + if (edge_to_poly_map_src) { + MEM_freeN(edge_to_poly_map_src); + } if (edge_to_poly_map_src_buff) { MEM_freeN(edge_to_poly_map_src_buff); } + if (poly_to_looptri_map_src) { + MEM_freeN(poly_to_looptri_map_src); + } if (poly_to_looptri_map_src_buff) { MEM_freeN(poly_to_looptri_map_src_buff); } |