[Bf-blender-cvs] [c6ea6e3] master: BMesh: avoid recursion for BM_mesh_edgenet, runs out stack memory on large nets
Campbell Barton
noreply at git.blender.org
Sun Jun 8 14:23:44 CEST 2014
Commit: c6ea6e368b90b69b9e97aeb557b7bde6dce8f44c
Author: Campbell Barton
Date: Sun Jun 8 22:20:03 2014 +1000
https://developer.blender.org/rBc6ea6e368b90b69b9e97aeb557b7bde6dce8f44c
BMesh: avoid recursion for BM_mesh_edgenet, runs out stack memory on large nets
===================================================================
M source/blender/bmesh/tools/bmesh_edgenet.c
===================================================================
diff --git a/source/blender/bmesh/tools/bmesh_edgenet.c b/source/blender/bmesh/tools/bmesh_edgenet.c
index ddf4394..a08aa61 100644
--- a/source/blender/bmesh/tools/bmesh_edgenet.c
+++ b/source/blender/bmesh/tools/bmesh_edgenet.c
@@ -203,12 +203,18 @@ static BMEdge *bm_edgenet_path_step(
BMVert *v_curr, LinkNode **v_ls,
VertNetInfo *vnet_info, BLI_mempool *path_pool)
{
- const VertNetInfo *vn_curr = &vnet_info[BM_elem_index_get(v_curr)];
+ const VertNetInfo *vn_curr;
BMEdge *e;
BMIter iter;
- unsigned int tot = 0;
- unsigned int v_ls_tot = 0;
+ unsigned int tot;
+ unsigned int v_ls_tot;
+
+
+begin:
+ tot = 0;
+ v_ls_tot = 0;
+ vn_curr = &vnet_info[BM_elem_index_get(v_curr)];
BM_ITER_ELEM (e, &iter, v_curr, BM_EDGES_OF_VERT) {
BMVert *v_next = BM_edge_other_vert(e, v_curr);
@@ -256,7 +262,12 @@ static BMEdge *bm_edgenet_path_step(
/* trick to walk along wire-edge paths */
if (v_ls_tot == 1 && tot == 1) {
v_curr = BLI_linklist_pop_pool(v_ls, path_pool);
+ /* avoid recursion, can crash on very large nets */
+#if 0
bm_edgenet_path_step(v_curr, v_ls, vnet_info, path_pool);
+#else
+ goto begin;
+#endif
}
return NULL;
More information about the Bf-blender-cvs
mailing list