[Bf-blender-cvs] [7969b23] master: Fix T39775: Skin modifier crash

Campbell Barton noreply at git.blender.org
Wed May 13 08:08:51 CEST 2015


Commit: 7969b238dbfd697a2590d654090080c862346d76
Author: Campbell Barton
Date:   Wed May 13 16:01:43 2015 +1000
Branches: master
https://developer.blender.org/rB7969b238dbfd697a2590d654090080c862346d76

Fix T39775: Skin modifier crash

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

M	source/blender/modifiers/intern/MOD_skin.c

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

diff --git a/source/blender/modifiers/intern/MOD_skin.c b/source/blender/modifiers/intern/MOD_skin.c
index 6c09622..1b8b296 100644
--- a/source/blender/modifiers/intern/MOD_skin.c
+++ b/source/blender/modifiers/intern/MOD_skin.c
@@ -104,6 +104,9 @@ typedef struct Frame {
 		/* Merge to target frame/corner (no merge if frame is null) */
 		struct Frame *frame;
 		int corner;
+		/* checked to avoid chaining.
+		 * (merging when we're already been referenced), see T39775 */
+		unsigned int is_target : 1;
 	} merge[4];
 
 	/* For hull frames, whether each vertex is detached or not */
@@ -363,7 +366,7 @@ static void merge_frame_corners(Frame **frames, int totframe)
 
 				/* Compare with each corner of all other frames... */
 				for (l = 0; l < 4; l++) {
-					if (frames[k]->merge[l].frame)
+					if (frames[k]->merge[l].frame || frames[k]->merge[l].is_target)
 						continue;
 
 					/* Some additional concerns that could be checked
@@ -393,6 +396,7 @@ static void merge_frame_corners(Frame **frames, int totframe)
 
 						frames[k]->merge[l].frame = frames[i];
 						frames[k]->merge[l].corner = j;
+						frames[i]->merge[j].is_target = true;
 
 						/* Can't merge another corner into the same
 						 * frame corner, so move on to frame k+1 */




More information about the Bf-blender-cvs mailing list