[Bf-blender-cvs] [a4642040dfe] greasepencil-object: Fix mermory leak for materials

Antonio Vazquez noreply at git.blender.org
Fri Apr 27 16:39:29 CEST 2018


Commit: a4642040dfee448f80363536ae02fc6fa675194f
Author: Antonio Vazquez
Date:   Fri Apr 27 16:39:12 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rBa4642040dfee448f80363536ae02fc6fa675194f

Fix mermory leak for materials

The materials array must be duplicated and free in every undo step.

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

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

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

diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 8d95618f9ed..277bf5afe8d 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -265,14 +265,14 @@ void BKE_gpencil_free(bGPdata *gpd, bool free_all)
 	}
 	BKE_gpencil_free_layers(&gpd->layers);
 
+	/* materials */
+	MEM_SAFE_FREE(gpd->mat);
+
 	/* free all data */
 	if (free_all) {
 		/* clear cache */
 		BKE_gpencil_batch_cache_free(gpd);
 
-		/* materials */
-		MEM_SAFE_FREE(gpd->mat);
-
 		/* free palettes (deprecated) */
 		BKE_gpencil_free_palettes(&gpd->palettes);
 	}
@@ -680,6 +680,11 @@ void BKE_gpencil_copy_data(Main *UNUSED(bmain), bGPdata *gpd_dst, const bGPdata
 	/* cache data is not duplicated */
 	gpd_dst->batch_cache_data = NULL;
 
+	/* duplicate material array */
+	if (gpd_src->mat) {
+		gpd_dst->mat = MEM_dupallocN(gpd_src->mat);
+	}
+
 	/* copy layers */
 	BLI_listbase_clear(&gpd_dst->layers);
 	for (const bGPDlayer *gpl_src = gpd_src->layers.first; gpl_src; gpl_src = gpl_src->next) {



More information about the Bf-blender-cvs mailing list