[Bf-blender-cvs] [56677f4] id-remap: Fix remaining cases of datablocks' BKE_foo_free() touching usercount of their IDs.

Bastien Montagne noreply at git.blender.org
Thu Jun 16 22:11:49 CEST 2016


Commit: 56677f4f14d5cde9922b404b4922c2e2db9e25b7
Author: Bastien Montagne
Date:   Thu Jun 16 22:06:32 2016 +0200
Branches: id-remap
https://developer.blender.org/rB56677f4f14d5cde9922b404b4922c2e2db9e25b7

Fix remaining cases of datablocks' BKE_foo_free() touching usercount of their IDs.

Note that a few sub-data (like animdata) needs to keep option to unlink their
own ID usages themselves for now, this is not ideal, but need some more time
to mumble on this and find an elegant fix. Nothing blocking here anyway.

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

M	source/blender/blenkernel/BKE_animsys.h
M	source/blender/blenkernel/intern/anim_sys.c
M	source/blender/blenkernel/intern/armature.c
M	source/blender/blenkernel/intern/camera.c
M	source/blender/blenkernel/intern/curve.c
M	source/blender/blenkernel/intern/effect.c
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/blenkernel/intern/key.c
M	source/blender/blenkernel/intern/lamp.c
M	source/blender/blenkernel/intern/lattice.c
M	source/blender/blenkernel/intern/linestyle.c
M	source/blender/blenkernel/intern/mask.c
M	source/blender/blenkernel/intern/material.c
M	source/blender/blenkernel/intern/mball.c
M	source/blender/blenkernel/intern/mesh.c
M	source/blender/blenkernel/intern/movieclip.c
M	source/blender/blenkernel/intern/node.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/paint.c
M	source/blender/blenkernel/intern/particle.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/speaker.c
M	source/blender/blenkernel/intern/texture.c
M	source/blender/blenkernel/intern/world.c
M	source/blender/editors/animation/anim_channels_edit.c
M	source/blender/editors/object/object_add.c
M	source/blender/editors/space_buttons/space_buttons.c
M	source/blender/editors/space_outliner/outliner_tools.c
M	source/blender/makesrna/intern/rna_ID.c

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

diff --git a/source/blender/blenkernel/BKE_animsys.h b/source/blender/blenkernel/BKE_animsys.h
index 6524aff..772e085 100644
--- a/source/blender/blenkernel/BKE_animsys.h
+++ b/source/blender/blenkernel/BKE_animsys.h
@@ -62,7 +62,7 @@ struct AnimData *BKE_animdata_add_id(struct ID *id);
 bool BKE_animdata_set_action(struct ReportList *reports, struct ID *id, struct bAction *act);
 
 /* Free AnimData */
-void BKE_animdata_free(struct ID *id);
+void BKE_animdata_free(struct ID *id, const bool do_id_user);
 
 /* Copy AnimData */
 struct AnimData *BKE_animdata_copy(struct AnimData *adt, const bool do_action);
diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c
index 99aae62..91b33f3 100644
--- a/source/blender/blenkernel/intern/anim_sys.c
+++ b/source/blender/blenkernel/intern/anim_sys.c
@@ -216,7 +216,7 @@ bool BKE_animdata_set_action(ReportList *reports, ID *id, bAction *act)
 /* Freeing -------------------------------------------- */
 
 /* Free AnimData used by the nominated ID-block, and clear ID-block's AnimData pointer */
-void BKE_animdata_free(ID *id)
+void BKE_animdata_free(ID *id, const bool do_id_user)
 {
 	/* Only some ID-blocks have this info for now, so we cast the 
 	 * types that do to be of type IdAdtTemplate
@@ -227,12 +227,14 @@ void BKE_animdata_free(ID *id)
 		
 		/* check if there's any AnimData to start with */
 		if (adt) {
-			/* unlink action (don't free, as it's in its own list) */
-			if (adt->action)
-				id_us_min(&adt->action->id);
-			/* same goes for the temporarily displaced action */
-			if (adt->tmpact)
-				id_us_min(&adt->tmpact->id);
+			if (do_id_user) {
+				/* unlink action (don't free, as it's in its own list) */
+				if (adt->action)
+					id_us_min(&adt->action->id);
+				/* same goes for the temporarily displaced action */
+				if (adt->tmpact)
+					id_us_min(&adt->tmpact->id);
+			}
 				
 			/* free nla data */
 			free_nladata(&adt->nla_tracks);
@@ -292,7 +294,7 @@ bool BKE_animdata_copy_id(ID *id_to, ID *id_from, const bool do_action)
 	if ((id_to && id_from) && (GS(id_to->name) != GS(id_from->name)))
 		return false;
 
-	BKE_animdata_free(id_to);
+	BKE_animdata_free(id_to, true);
 
 	adt = BKE_animdata_from_id(id_from);
 	if (adt) {
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 8204a73..0389937 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -123,7 +123,7 @@ void BKE_armature_bonelist_free(ListBase *lb)
 /** Free (or release) any data used by this armature (does not free the armature itself). */
 void BKE_armature_free(bArmature *arm)
 {
-	BKE_animdata_free(&arm->id);
+	BKE_animdata_free(&arm->id, false);
 
 	BKE_armature_bonelist_free(&arm->bonebase);
 
diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c
index bffbb90..eabee74 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -156,7 +156,7 @@ void BKE_camera_make_local(Camera *cam)
 /** Free (or release) any data used by this camera (does not free the camera itself). */
 void BKE_camera_free(Camera *ca)
 {
-	BKE_animdata_free((ID *)ca);
+	BKE_animdata_free((ID *)ca, false);
 }
 
 /******************************** Camera Usage *******************************/
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index cec8e4c..dec6ff2 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -109,7 +109,7 @@ void BKE_curve_editNurb_free(Curve *cu)
 /** Free (or release) any data used by this curve (does not free the curve itself). */
 void BKE_curve_free(Curve *cu)
 {
-	BKE_animdata_free((ID *)cu);
+	BKE_animdata_free((ID *)cu, false);
 
 	BKE_nurbList_free(&cu->nurb);
 	BKE_curve_editfont_free(cu);
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index f06dd6f..a8268c0 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -139,9 +139,6 @@ void free_partdeflect(PartDeflect *pd)
 	if (!pd)
 		return;
 
-	if (pd->tex)
-		id_us_min(&pd->tex->id);
-
 	if (pd->rng)
 		BLI_rng_free(pd->rng);
 
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index f000803..af1bcd0 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -116,7 +116,7 @@ void free_gpencil_layers(ListBase *list)
 /** Free (or release) any data used by this grease pencil (does not free the gpencil itself). */
 void BKE_gpencil_free(bGPdata *gpd)
 {
-	BKE_animdata_free(&gpd->id);
+	BKE_animdata_free(&gpd->id, false);
 
 	/* free layers */
 	free_gpencil_layers(&gpd->layers);
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index 9236736..2517e2c 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -80,7 +80,7 @@ void BKE_key_free(Key *key)
 {
 	KeyBlock *kb;
 
-	BKE_animdata_free((ID *)key);
+	BKE_animdata_free((ID *)key, false);
 
 	while ((kb = BLI_pophead(&key->block))) {
 		if (kb->data)
diff --git a/source/blender/blenkernel/intern/lamp.c b/source/blender/blenkernel/intern/lamp.c
index 49a5734..692b703 100644
--- a/source/blender/blenkernel/intern/lamp.c
+++ b/source/blender/blenkernel/intern/lamp.c
@@ -234,7 +234,7 @@ void BKE_lamp_free(Lamp *la)
 			MEM_freeN(mtex);
 	}
 	
-	BKE_animdata_free((ID *)la);
+	BKE_animdata_free((ID *)la, false);
 
 	curvemapping_free(la->curfalloff);
 
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index 6879d6f..58c0a56 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -303,7 +303,7 @@ Lattice *BKE_lattice_copy(Lattice *lt)
 /** Free (or release) any data used by this lattice (does not free the lattice itself). */
 void BKE_lattice_free(Lattice *lt)
 {
-	BKE_animdata_free(&lt->id);
+	BKE_animdata_free(&lt->id, false);
 
 	MEM_SAFE_FREE(lt->def);
 	if (lt->dvert) {
diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c
index 72fb03e..30dc488 100644
--- a/source/blender/blenkernel/intern/linestyle.c
+++ b/source/blender/blenkernel/intern/linestyle.c
@@ -131,7 +131,7 @@ void BKE_linestyle_free(FreestyleLineStyle *linestyle)
 	LineStyleModifier *m;
 	int a;
 
-	BKE_animdata_free(&linestyle->id);
+	BKE_animdata_free(&linestyle->id, false);
 
 	for (a = 0; a < MAX_MTEX; a++) {
 		MEM_SAFE_FREE(linestyle->mtex[a]);
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c
index f89b9cc..94e5375 100644
--- a/source/blender/blenkernel/intern/mask.c
+++ b/source/blender/blenkernel/intern/mask.c
@@ -1013,7 +1013,7 @@ void BKE_mask_layer_free_list(ListBase *masklayers)
 /** Free (or release) any data used by this mask (does not free the mask itself). */
 void BKE_mask_free(Mask *mask)
 {
-	BKE_animdata_free((ID *)mask);
+	BKE_animdata_free((ID *)mask, false);
 
 	/* free mask data */
 	BKE_mask_layer_free_list(&mask->masklayers);
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index a067aa8..db5ac54 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -86,7 +86,7 @@ void BKE_material_free(Material *ma)
 {
 	int a;
 
-	BKE_animdata_free((ID *)ma);
+	BKE_animdata_free((ID *)ma, false);
 	
 	for (a = 0; a < MAX_MTEX; a++) {
 		MEM_SAFE_FREE(ma->mtex[a]);
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index 1715549..685cd35 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -69,7 +69,7 @@
 /** Free (or release) any data used by this mball (does not free the mball itself). */
 void BKE_mball_free(MetaBall *mb)
 {
-	BKE_animdata_free((ID *)mb);
+	BKE_animdata_free((ID *)mb, false);
 
 	MEM_SAFE_FREE(mb->mat);
 
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 959ae60..4e47dfc 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -436,7 +436,7 @@ bool BKE_mesh_has_custom_loop_normals(Mesh *me)
 /** Free (or release) any data used by this mesh (does not free the mesh itself). */
 void BKE_mesh_free(Mesh *me)
 {
-	BKE_animdata_free(&me->id);
+	BKE_animdata_free(&me->id, false);
 
 	CustomData_free(&me->vdata, me->totvert);
 	CustomData_free(&me->edata, me->totedge);
diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c
index 0deda42..5f66773 100644
--- a/source/blender/blenkernel/intern/movieclip.c
+++ b/source/blender/blenkernel/intern/movieclip.c
@@ -1248,7 +1248,7 @@ static void free_buffers(MovieClip *clip)
 		clip->anim = NULL;
 	}
 
-	BKE_animdata_free((ID *) clip);
+	BKE_animdata_free((ID *) clip, false);
 }
 
 void BKE_movieclip_clear_cache(MovieClip *clip)
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 8fef85c..781e767 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -1795,7 +1795,7 @@ void ntreeFreeTree(bNodeTree *ntree)
 	bNode *node, *next;
 	bNodeSocket *sock, *nextsock;
 
-	BKE_animdata_free((ID *)ntree);
+	BKE_animdata_free((ID *)ntree, false);
 
 	/* XXX hack! node trees should not store execution graphs at all.
 	 * This should be removed when old tree types no longer require it.
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index f456962..d4ba70e 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -396,7 +396,7 @@ void BKE_object_free_caches(Object *object)
 /** Free (or release) any data used by this object (does not free the object itself). */
 void BKE_object_free(Object *ob)
 {
-	BKE_animdata_free((ID *)ob);
+	BKE_animdata_free((ID *)ob, 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list