[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44567] trunk/blender/source/blender/ editors/transform: Fix crash on edge slide when object has got multires modifier

Sergey Sharybin sergey.vfx at gmail.com
Thu Mar 1 08:11:00 CET 2012


Revision: 44567
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44567
Author:   nazgul
Date:     2012-03-01 07:10:45 +0000 (Thu, 01 Mar 2012)
Log Message:
-----------
Fix crash on edge slide when object has got multires modifier

Issue was caused by fix for slide+automerge bug resulted in accessing to freed memory
from multires projection code. Solved by moving multires projection from cleanup callback
to special_aftertrans_update.

Patch by Antony Riakiotakis with some own corrections.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_conversions.c

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2012-03-01 02:20:10 UTC (rev 44566)
+++ trunk/blender/source/blender/editors/transform/transform.c	2012-03-01 07:10:45 UTC (rev 44567)
@@ -4783,16 +4783,6 @@
 	if (!sld)
 		return;
 	
-	/*handle multires reprojection, done
-      on transform completion since it's
-      really slow -joeedh*/
-	if (t->state != TRANS_CANCEL) {
-		projectSVData(t, 1);
-	} else {
-		sld->perc = 0.0;
-		projectSVData(t, 0);
-	}
-
 	freeSlideTempFaces(sld);
 
 	sld->em->bm->ob = t->obedit;

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2012-03-01 02:20:10 UTC (rev 44566)
+++ trunk/blender/source/blender/editors/transform/transform.h	2012-03-01 07:10:45 UTC (rev 44567)
@@ -691,5 +691,6 @@
 
 void freeSlideTempFaces(SlideData *sld);
 void freeSlideVerts(TransInfo *t);
+void projectSVData(TransInfo *t, int final);
 
 #endif

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-03-01 02:20:10 UTC (rev 44566)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-03-01 07:10:45 UTC (rev 44567)
@@ -4877,10 +4877,26 @@
 				/* we need to delete the temporary faces before automerging */
 				if(t->mode == TFM_EDGE_SLIDE){
 					SlideData *sld = t->customData;
+
+					/* handle multires reprojection, done
+					 * on transform completion since it's
+					 * really slow -joeedh */
+					projectSVData(t, TRUE);
+
+					/* free temporary faces to avoid automerging and deleting
+					 * during cleanup - psy-fi */
 					freeSlideTempFaces(sld);
 				}
 				EDBM_automerge(t->scene, t->obedit, 1);
 			}
+			else {
+				if (t->mode == TFM_EDGE_SLIDE) {
+					SlideData *sld = t->customData;
+
+					sld->perc = 0.0;
+					projectSVData(t, FALSE);
+				}
+			}
 		}
 	}
 	




More information about the Bf-blender-cvs mailing list