[Bf-blender-cvs] [69d710187d5] blender2.8: Fix unreported assert error when change instance modifier

Antonioya noreply at git.blender.org
Fri Aug 10 13:14:51 CEST 2018


Commit: 69d710187d5ae5e5e8b54761187ef8770f3fbb00
Author: Antonioya
Date:   Thu Aug 9 20:48:05 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB69d710187d5ae5e5e8b54761187ef8770f3fbb00

Fix unreported assert error when change instance modifier

Doing very fast change in the number of instances soemtimes get an error of duplicate ghash entry.

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

M	source/blender/draw/engines/gpencil/gpencil_draw_utils.c

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
index 0a805fa9b29..f8a04a06d80 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
@@ -1230,19 +1230,33 @@ void DRW_gpencil_populate_datablock(GPENCIL_e_data *e_data, void *vedata, Scene
 			gpl->runtime.derived_data = (GHash *)BLI_ghash_str_new(gpl->info);
 		}
 
-		derived_gpf = BLI_ghash_lookup(gpl->runtime.derived_data, ob->id.name);
+		if (BLI_ghash_haskey(gpl->runtime.derived_data, ob->id.name)) {
+			derived_gpf = BLI_ghash_lookup(gpl->runtime.derived_data, ob->id.name);
+		}
+		else {
+			derived_gpf = NULL;
+		}
+
 		if (derived_gpf == NULL) {
 			cache->is_dirty = true;
 		}
 		if (cache->is_dirty) {
 			if (derived_gpf != NULL) {
 				/* first clear temp data */
+				if (BLI_ghash_haskey(gpl->runtime.derived_data, ob->id.name)) {
+					BLI_ghash_remove(gpl->runtime.derived_data, ob->id.name, NULL, NULL);
+				}
+
 				BKE_gpencil_free_frame_runtime_data(derived_gpf);
-				BLI_ghash_remove(gpl->runtime.derived_data, ob->id.name, NULL, NULL);
 			}
 			/* create new data */
 			derived_gpf = BKE_gpencil_frame_duplicate(gpf);
-			BLI_ghash_insert(gpl->runtime.derived_data, ob->id.name, derived_gpf);
+			if (!BLI_ghash_haskey(gpl->runtime.derived_data, ob->id.name)) {
+				BLI_ghash_insert(gpl->runtime.derived_data, ob->id.name, derived_gpf);
+			}
+			else {
+				BLI_ghash_reinsert(gpl->runtime.derived_data, ob->id.name, derived_gpf, NULL, NULL);
+			}
 		}
 
 		/* draw onion skins */



More information about the Bf-blender-cvs mailing list