[Bf-blender-cvs] [02543bf7a1e] greasepencil-object: Fix segment fault when free GHash

Antonio Vazquez noreply at git.blender.org
Wed Jul 26 16:52:07 CEST 2017


Commit: 02543bf7a1ea547cd2129fb8a3755242c955cf20
Author: Antonio Vazquez
Date:   Wed Jul 26 16:51:56 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB02543bf7a1ea547cd2129fb8a3755242c955cf20

Fix segment fault when free GHash

If the GHash is null, don't free again

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

M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c

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

diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 63750fa0548..69087a57e7a 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -273,8 +273,10 @@ static void BKE_gpencil_free_layers_temp_data(ListBase *list)
 		gpl_next = gpl->next;
 		BKE_gpencil_clear_derived(gpl);
 
-		BLI_ghash_free(gpl->derived_data, NULL, NULL);
-		gpl->derived_data = NULL;
+		if (gpl->derived_data) {
+			BLI_ghash_free(gpl->derived_data, NULL, NULL);
+			gpl->derived_data = NULL;
+		}
 	}
 }
 
@@ -286,8 +288,10 @@ void BKE_gpencil_free_derived_frames(bGPdata *gpd)
 	for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
 		BKE_gpencil_clear_derived(gpl);
 
-		BLI_ghash_free(gpl->derived_data, NULL, NULL);
-		gpl->derived_data = NULL;
+		if (gpl->derived_data) {
+			BLI_ghash_free(gpl->derived_data, NULL, NULL);
+			gpl->derived_data = NULL;
+		}
 	}
 }
 
@@ -1230,8 +1234,10 @@ void BKE_gpencil_layer_delete(bGPdata *gpd, bGPDlayer *gpl)
 	
 	/* free derived data */
 	BKE_gpencil_clear_derived(gpl);
-	BLI_ghash_free(gpl->derived_data, NULL, NULL);
-	gpl->derived_data = NULL;
+	if (gpl->derived_data) {
+		BLI_ghash_free(gpl->derived_data, NULL, NULL);
+		gpl->derived_data = NULL;
+	}
 
 	BLI_freelinkN(&gpd->layers, gpl);
 }
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index e394fea31cd..0b2f52a01db 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -863,8 +863,10 @@ void DRW_gpencil_batch_cache_free(bGPdata *gpd)
 	BLI_ghashIterator_free(ihash);
 
 	/* free hash */
-	BLI_ghash_free(gpd->batch_cache_data, NULL, NULL);
-	gpd->batch_cache_data = NULL;
+	if (gpd->batch_cache_data) {
+		BLI_ghash_free(gpd->batch_cache_data, NULL, NULL);
+		gpd->batch_cache_data = NULL;
+	}
 }
 
 struct GPUTexture *DRW_gpencil_create_blank_texture(int width, int height)




More information about the Bf-blender-cvs mailing list