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>2014-06-08 16:20:03 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-06-08 16:20:03 +0400
commitc6ea6e368b90b69b9e97aeb557b7bde6dce8f44c (patch)
treefca3cde840b0d75339d8fcca7a866b1a191fcae7
parentf8f25c38d3352c7f480bbf1eba6415f76f62c76e (diff)
BMesh: avoid recursion for BM_mesh_edgenet, runs out stack memory on large nets
-rw-r--r--source/blender/bmesh/tools/bmesh_edgenet.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/source/blender/bmesh/tools/bmesh_edgenet.c b/source/blender/bmesh/tools/bmesh_edgenet.c
index ddf43949258..a08aa6184b5 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;