[Bf-blender-cvs] [d4fb8503664] master: Fix T69829: Gpencil sample memory leaks.

YimingWu noreply at git.blender.org
Fri Sep 13 15:43:58 CEST 2019


Commit: d4fb85036640505b5bcbd5e0ef69512de46aa0ad
Author: YimingWu
Date:   Fri Sep 13 20:59:39 2019 +0800
Branches: master
https://developer.blender.org/rBd4fb85036640505b5bcbd5e0ef69512de46aa0ad

Fix T69829: Gpencil sample memory leaks.

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

M	source/blender/blenkernel/intern/gpencil.c

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

diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 84efc007f58..a7301af3176 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1481,10 +1481,9 @@ static MDeformVert *stroke_defvert_new_count(int count, int totweight, ListBase
   LinkData *ld;
   MDeformVert *dst = MEM_mallocN(count * sizeof(MDeformVert), "new_deformVert");
 
-  dst->totweight = totweight;
-
   for (i = 0; i < count; i++) {
     dst[i].dw = MEM_mallocN(sizeof(MDeformWeight) * totweight, "new_deformWeight");
+    dst[i].totweight = totweight;
     j = 0;
     /* re-assign deform groups */
     for (ld = def_nr_list->first; ld; ld = ld->next) {
@@ -1674,7 +1673,7 @@ bool BKE_gpencil_sample_stroke(bGPDstroke *gps, const float dist, const bool sel
   int result_totweight;
 
   if (gps->dvert != NULL) {
-    stroke_defvert_create_nr_list(gps->dvert, count, &def_nr_list, &result_totweight);
+    stroke_defvert_create_nr_list(gps->dvert, gps->totpoints, &def_nr_list, &result_totweight);
     new_dv = stroke_defvert_new_count(count, result_totweight, &def_nr_list);
   }
 
@@ -1730,13 +1729,17 @@ bool BKE_gpencil_sample_stroke(bGPDstroke *gps, const float dist, const bool sel
   }
 
   gps->points = new_pt;
-  MEM_freeN(pt); /* original */
+  /* Free original vertex list. */
+  MEM_freeN(pt);
 
   if (new_dv) {
+    /* Free original weight data. */
     BKE_gpencil_free_stroke_weights(gps);
+    MEM_freeN(gps->dvert);
     while ((ld = BLI_pophead(&def_nr_list))) {
       MEM_freeN(ld);
     }
+
     gps->dvert = new_dv;
   }



More information about the Bf-blender-cvs mailing list