Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2015-07-23 22:04:33 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-07-23 22:04:33 +0300
commit36630b7e854ba69520aab9be411361589eb3ce83 (patch)
tree150e1ff0ffaa0eff5051ec43d105245b06adcc22
parentd47e565598f41ad9571e7ce112caaf9f776c0647 (diff)
Fix memory leaks mesh w/ mesh remapping
-rw-r--r--source/blender/blenkernel/intern/mesh_mapping.c18
-rw-r--r--source/blender/blenkernel/intern/mesh_remap.c12
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);
}