[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32039] trunk/blender/source/blender/ editors/transform/transform_conversions.c: bugfix [#23927] Crash proportional editing: connected

Campbell Barton ideasman42 at gmail.com
Tue Sep 21 14:27:09 CEST 2010


Revision: 32039
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32039
Author:   campbellbarton
Date:     2010-09-21 14:27:09 +0200 (Tue, 21 Sep 2010)

Log Message:
-----------
bugfix [#23927] Crash proportional editing: connected
crash when using too much stack memory, each recursive call for the sorting function would allocate 200 bytes in TransData per call (64bit os), now pass this as an argument.

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

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2010-09-21 10:59:53 UTC (rev 32038)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2010-09-21 12:27:09 UTC (rev 32039)
@@ -102,20 +102,19 @@
 
 /* ************************** Functions *************************** */
 
-static void qsort_trans_data(TransInfo *t, TransData *head, TransData *tail) {
-	TransData pivot = *head;
+static void qsort_trans_data(TransInfo *t, TransData *head, TransData *tail, TransData *temp) {
 	TransData *ihead = head;
 	TransData *itail = tail;
-	short connected = t->flag & T_PROP_CONNECTED;
+	*temp = *head;
 
 	while (head < tail)
 	{
-		if (connected) {
-			while ((tail->dist >= pivot.dist) && (head < tail))
+		if (t->flag & T_PROP_CONNECTED) {
+			while ((tail->dist >= temp->dist) && (head < tail))
 				tail--;
 		}
 		else {
-			while ((tail->rdist >= pivot.rdist) && (head < tail))
+			while ((tail->rdist >= temp->rdist) && (head < tail))
 				tail--;
 		}
 
@@ -125,12 +124,12 @@
 			head++;
 		}
 
-		if (connected) {
-			while ((head->dist <= pivot.dist) && (head < tail))
+		if (t->flag & T_PROP_CONNECTED) {
+			while ((head->dist <= temp->dist) && (head < tail))
 				head++;
 		}
 		else {
-			while ((head->rdist <= pivot.rdist) && (head < tail))
+			while ((head->rdist <= temp->rdist) && (head < tail))
 				head++;
 		}
 
@@ -141,16 +140,17 @@
 		}
 	}
 
-	*head = pivot;
+	*head = *temp;
 	if (ihead < head) {
-		qsort_trans_data(t, ihead, head-1);
+		qsort_trans_data(t, ihead, head-1, temp);
 	}
 	if (itail > head) {
-		qsort_trans_data(t, head+1, itail);
+		qsort_trans_data(t, head+1, itail, temp);
 	}
 }
 
 void sort_trans_data_dist(TransInfo *t) {
+	TransData temp;
 	TransData *start = t->data;
 	int i = 1;
 
@@ -158,7 +158,7 @@
 		start++;
 		i++;
 	}
-	qsort_trans_data(t, start, t->data + t->total - 1);
+	qsort_trans_data(t, start, t->data + t->total - 1, &temp);
 }
 
 static void sort_trans_data(TransInfo *t)





More information about the Bf-blender-cvs mailing list