[Bf-blender-cvs] [a0799ce3368] master: Fix T51137: Edge Rip Hangs

Campbell Barton noreply at git.blender.org
Fri Apr 7 03:47:57 CEST 2017


Commit: a0799ce33680ff9eea6afeb41b14a66db14f7a20
Author: Campbell Barton
Date:   Fri Apr 7 11:43:50 2017 +1000
Branches: master
https://developer.blender.org/rBa0799ce33680ff9eea6afeb41b14a66db14f7a20

Fix T51137: Edge Rip Hangs

===================================================================

M	source/blender/bmesh/intern/bmesh_core.c

===================================================================

diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c
index cee5450a37d..4fe14fdf5c9 100644
--- a/source/blender/bmesh/intern/bmesh_core.c
+++ b/source/blender/bmesh/intern/bmesh_core.c
@@ -2403,15 +2403,20 @@ static void bmesh_kernel_vert_separate__cleanup(BMesh *bm, LinkNode *edges_separ
 	do {
 		LinkNode *n_orig = edges_separate->link;
 		do {
-			BMEdge *e_orig = n_orig->link;
+			LinkNode *n_prev = n_orig;
 			LinkNode *n_step = n_orig->next;
+			BMEdge *e_orig = n_orig->link;
 			do {
 				BMEdge *e = n_step->link;
 				BLI_assert(e != e_orig);
-				if ((e->v1 == e_orig->v1) && (e->v2 == e_orig->v2)) {
-					BM_edge_splice(bm, e_orig, e);
+				if ((e->v1 == e_orig->v1) && (e->v2 == e_orig->v2) &&
+				    BM_edge_splice(bm, e_orig, e))
+				{
+					/* don't visit again */
+					n_prev->next = n_step->next;
 				}
-			} while ((n_step = n_step->next));
+			} while ((n_prev = n_step),
+			         (n_step = n_step->next));
 
 		} while ((n_orig = n_orig->next) && n_orig->next);
 	} while ((edges_separate = edges_separate->next));




More information about the Bf-blender-cvs mailing list