[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47260] branches/soc-2011-tomato/source/ blender/blenkernel/intern/mask.c: Fixed memory leak caused by not freeing uw array for points in deformed spline

Sergey Sharybin sergey.vfx at gmail.com
Thu May 31 11:01:16 CEST 2012


Revision: 47260
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47260
Author:   nazgul
Date:     2012-05-31 09:01:15 +0000 (Thu, 31 May 2012)
Log Message:
-----------
Fixed memory leak caused by not freeing uw array for points in deformed spline

Modified Paths:
--------------
    branches/soc-2011-tomato/source/blender/blenkernel/intern/mask.c

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/mask.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/mask.c	2012-05-31 08:39:22 UTC (rev 47259)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/mask.c	2012-05-31 09:01:15 UTC (rev 47260)
@@ -1155,18 +1155,24 @@
 
 void BKE_mask_spline_ensure_deform(MaskSpline *spline)
 {
+	int allocated_points = (MEM_allocN_len(spline->points_deform) / sizeof(*spline->points_deform));
 // printf("SPLINE ALLOC %p %d\n", spline->points_deform, (int)(MEM_allocN_len(spline->points_deform) / sizeof(*spline->points_deform)));
 
-	if ((spline->points_deform == NULL) ||
-	    (MEM_allocN_len(spline->points_deform) / sizeof(*spline->points_deform)) != spline->tot_point)
-	{
+	if (spline->points_deform == NULL || allocated_points != spline->tot_point) {
 		printf("alloc new spline\n");
 
 		if (spline->points_deform) {
+			int i;
+
+			for (i = 0; i < allocated_points; i++) {
+				MaskSplinePoint *point = &spline->points_deform[i];
+				BKE_mask_point_free(point);
+			}
+
 			MEM_freeN(spline->points_deform);
 		}
 
-		spline->points_deform = MEM_mallocN(sizeof(*spline->points_deform) * spline->tot_point, __func__);
+		spline->points_deform = MEM_callocN(sizeof(*spline->points_deform) * spline->tot_point, __func__);
 	}
 	else {
 		// printf("alloc spline done\n");
@@ -1230,6 +1236,8 @@
 				MaskSplinePoint *point_deform = &spline->points_deform[i];
 				float delta[2];
 
+				BKE_mask_point_free(point_deform);
+
 				*point_deform = *point;
 				point_deform->uw = point->uw ? MEM_dupallocN(point->uw) : NULL;
 




More information about the Bf-blender-cvs mailing list