[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