[Bf-blender-cvs] [8657963] master: Cleanup: avoid incrementing/decrementing id->us outside of BKE_library.

Bastien Montagne noreply at git.blender.org
Mon Nov 9 21:07:46 CET 2015


Commit: 865796375bcfa6be4288cca4243dddcb4092f70b
Author: Bastien Montagne
Date:   Mon Nov 9 19:47:10 2015 +0100
Branches: master
https://developer.blender.org/rB865796375bcfa6be4288cca4243dddcb4092f70b

Cleanup: avoid incrementing/decrementing id->us outside of BKE_library.

We have callbacks for that, they also do some checks and help ensure things are done
correctly. Only place where this is assumed not true is blenloader (since here we
may affect refcount of library IDs as well...).

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

M	source/blender/blenkernel/intern/DerivedMesh.c
M	source/blender/blenkernel/intern/anim_sys.c
M	source/blender/blenkernel/intern/armature.c
M	source/blender/blenkernel/intern/brush.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/font.c
M	source/blender/blenkernel/intern/freestyle.c
M	source/blender/blenkernel/intern/idprop.c
M	source/blender/blenkernel/intern/image.c
M	source/blender/blenkernel/intern/ipo.c
M	source/blender/blenkernel/intern/lamp.c
M	source/blender/blenkernel/intern/lattice.c
M	source/blender/blenkernel/intern/library.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/nla.c
M	source/blender/blenkernel/intern/node.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/particle.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/sequencer.c
M	source/blender/blenkernel/intern/sound.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/collada/DocumentImporter.cpp
M	source/blender/collada/MeshImporter.cpp
M	source/blender/editors/curve/editcurve.c
M	source/blender/editors/curve/editfont.c
M	source/blender/editors/mesh/meshtools.c
M	source/blender/editors/object/object_add.c
M	source/blender/editors/object/object_edit.c
M	source/blender/editors/object/object_relations.c
M	source/blender/editors/physics/particle_object.c
M	source/blender/editors/render/render_shading.c
M	source/blender/editors/sound/sound_ops.c
M	source/blender/editors/space_action/action_data.c
M	source/blender/editors/space_clip/clip_ops.c
M	source/blender/editors/space_image/image_ops.c
M	source/blender/editors/space_logic/logic_window.c
M	source/blender/editors/space_nla/nla_edit.c
M	source/blender/editors/space_node/drawnode.c
M	source/blender/editors/space_node/node_add.c
M	source/blender/editors/space_node/node_edit.c
M	source/blender/editors/space_node/node_templates.c
M	source/blender/editors/space_outliner/outliner_tools.c
M	source/blender/editors/space_sequencer/sequencer_edit.c
M	source/blender/editors/transform/transform_generics.c
M	source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
M	source/blender/makesrna/intern/rna_object_force.c
M	source/blender/makesrna/intern/rna_particle.c
M	source/blender/makesrna/intern/rna_scene.c
M	source/gameengine/Converter/KX_BlenderSceneConverter.cpp

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

diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index a5a29f6..3c83fbe 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -52,6 +52,7 @@
 #include "BKE_cdderivedmesh.h"
 #include "BKE_editmesh.h"
 #include "BKE_key.h"
+#include "BKE_library.h"
 #include "BKE_material.h"
 #include "BKE_modifier.h"
 #include "BKE_mesh.h"
@@ -800,7 +801,8 @@ void DM_to_mesh(DerivedMesh *dm, Mesh *me, Object *ob, CustomDataMask mask, bool
 	 * stack*/
 	if (tmp.totvert != me->totvert && !did_shapekeys && me->key) {
 		printf("%s: YEEK! this should be recoded! Shape key loss!: ID '%s'\n", __func__, tmp.id.name);
-		if (tmp.key) tmp.key->id.us--;
+		if (tmp.key)
+			id_us_min(&tmp.key->id);
 		tmp.key = NULL;
 	}
 
diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c
index 8010d34..2ddf014 100644
--- a/source/blender/blenkernel/intern/anim_sys.c
+++ b/source/blender/blenkernel/intern/anim_sys.c
@@ -229,10 +229,10 @@ void BKE_animdata_free(ID *id)
 		if (adt) {
 			/* unlink action (don't free, as it's in its own list) */
 			if (adt->action)
-				adt->action->id.us--;
+				id_us_min(&adt->action->id);
 			/* same goes for the temporarily displaced action */
 			if (adt->tmpact)
-				adt->tmpact->id.us--;
+				id_us_min(&adt->tmpact->id);
 				
 			/* free nla data */
 			free_nladata(&adt->nla_tracks);
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index fde2578..0d75724 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -169,8 +169,8 @@ void BKE_armature_make_local(bArmature *arm)
 			if (ob->data == arm) {
 				if (ob->id.lib == NULL) {
 					ob->data = arm_new;
-					arm_new->id.us++;
-					arm->id.us--;
+					id_us_plus(&arm_new->id);
+					id_us_min(&arm->id);
 				}
 			}
 		}
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 95b65f5..201750d 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -195,7 +195,7 @@ Brush *BKE_brush_copy(Brush *brush)
 	/* enable fake user by default */
 	if (!(brushn->id.flag & LIB_FAKEUSER)) {
 		brushn->id.flag |= LIB_FAKEUSER;
-		brushn->id.us++;
+		id_us_plus(&brushn->id);
 	}
 	
 	if (brush->id.lib) {
@@ -282,7 +282,7 @@ void BKE_brush_make_local(Brush *brush)
 		/* enable fake user by default */
 		if (!(brush->id.flag & LIB_FAKEUSER)) {
 			brush->id.flag |= LIB_FAKEUSER;
-			brush->id.us++;
+			id_us_plus(&brush->id);
 		}
 	}
 	else if (is_local && is_lib) {
@@ -505,7 +505,7 @@ int BKE_brush_texture_set_nr(Brush *brush, int nr)
 	if (idtest == NULL) { /* new tex */
 		if (id) idtest = (ID *)BKE_texture_copy((Tex *)id);
 		else idtest = (ID *)BKE_texture_add(G.main, "Tex");
-		idtest->us--;
+		id_us_min(idtest);
 	}
 	if (idtest != id) {
 		BKE_brush_texture_delete(brush);
@@ -522,7 +522,7 @@ int BKE_brush_texture_set_nr(Brush *brush, int nr)
 int BKE_brush_texture_delete(Brush *brush)
 {
 	if (brush->mtex.tex)
-		brush->mtex.tex->id.us--;
+		id_us_min(&brush->mtex.tex->id);
 
 	return 1;
 }
@@ -548,7 +548,7 @@ int BKE_brush_clone_image_set_nr(Brush *brush, int nr)
 int BKE_brush_clone_image_delete(Brush *brush)
 {
 	if (brush && brush->clone.image) {
-		brush->clone.image->id.us--;
+		id_us_min(&brush->clone.image->id);
 		brush->clone.image = NULL;
 		return 1;
 	}
diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c
index 46b74c5..73b1f0e 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -143,8 +143,8 @@ void BKE_camera_make_local(Camera *cam)
 			if (ob->data == cam) {
 				if (ob->id.lib == NULL) {
 					ob->data = cam_new;
-					cam_new->id.us++;
-					cam->id.us--;
+					id_us_plus(&cam_new->id);
+					id_us_min(&cam->id);
 				}
 			}
 		}
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 3e0bdbe..2235825 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -74,27 +74,28 @@ void BKE_curve_unlink(Curve *cu)
 	int a;
 
 	for (a = 0; a < cu->totcol; a++) {
-		if (cu->mat[a]) cu->mat[a]->id.us--;
+		if (cu->mat[a])
+			id_us_min(&cu->mat[a]->id);
 		cu->mat[a] = NULL;
 	}
 	if (cu->vfont)
-		cu->vfont->id.us--;
+		id_us_min(&cu->vfont->id);
 	cu->vfont = NULL;
 
 	if (cu->vfontb)
-		cu->vfontb->id.us--;
+		id_us_min(&cu->vfontb->id);
 	cu->vfontb = NULL;
 
 	if (cu->vfonti)
-		cu->vfonti->id.us--;
+		id_us_min(&cu->vfonti->id);
 	cu->vfonti = NULL;
 
 	if (cu->vfontbi)
-		cu->vfontbi->id.us--;
+		id_us_min(&cu->vfontbi->id);
 	cu->vfontbi = NULL;
 
 	if (cu->key)
-		cu->key->id.us--;
+		id_us_min(&cu->key->id);
 	cu->key = NULL;
 }
 
@@ -305,8 +306,8 @@ void BKE_curve_make_local(Curve *cu)
 			if (ob->data == cu) {
 				if (ob->id.lib == NULL) {
 					ob->data = cu_new;
-					cu_new->id.us++;
-					cu->id.us--;
+					id_us_plus(&cu_new->id);
+					id_us_min(&cu->id);
 				}
 			}
 		}
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index e66fa86..3069601 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -64,6 +64,7 @@
 #include "BKE_cdderivedmesh.h"
 #include "BKE_effect.h"
 #include "BKE_global.h"
+#include "BKE_library.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"
 #include "BKE_particle.h"
@@ -139,7 +140,7 @@ void free_partdeflect(PartDeflect *pd)
 		return;
 
 	if (pd->tex)
-		pd->tex->id.us--;
+		id_us_min(&pd->tex->id);
 
 	if (pd->rng)
 		BLI_rng_free(pd->rng);
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index b12e16d..e8bfa27 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -293,7 +293,7 @@ VFont *BKE_vfont_load_exists_ex(struct Main *bmain, const char *filepath, bool *
 		BLI_path_abs(strtest, ID_BLEND_PATH(bmain, &vfont->id));
 
 		if (BLI_path_cmp(strtest, str) == 0) {
-			vfont->id.us++;  /* officially should not, it doesn't link here! */
+			id_us_plus(&vfont->id);  /* officially should not, it doesn't link here! */
 			if (r_exists)
 				*r_exists = true;
 			return vfont;
diff --git a/source/blender/blenkernel/intern/freestyle.c b/source/blender/blenkernel/intern/freestyle.c
index f6c4263..3a15be5 100644
--- a/source/blender/blenkernel/intern/freestyle.c
+++ b/source/blender/blenkernel/intern/freestyle.c
@@ -35,6 +35,7 @@
 #include "DNA_group_types.h"
 
 #include "BKE_freestyle.h"
+#include "BKE_library.h"
 #include "BKE_linestyle.h"
 
 #include "BLI_blenlib.h"
@@ -65,11 +66,11 @@ void BKE_freestyle_config_free(FreestyleConfig *config)
 
 	for (lineset = (FreestyleLineSet *)config->linesets.first; lineset; lineset = lineset->next) {
 		if (lineset->group) {
-			lineset->group->id.us--;
+			id_us_min(&lineset->group->id);
 			lineset->group = NULL;
 		}
 		if (lineset->linestyle) {
-			lineset->linestyle->id.us--;
+			id_us_min(&lineset->linestyle->id);
 			lineset->linestyle = NULL;
 		}
 	}
@@ -107,7 +108,7 @@ static void copy_lineset(FreestyleLineSet *new_lineset, FreestyleLineSet *linese
 {
 	new_lineset->linestyle = lineset->linestyle;
 	if (new_lineset->linestyle)
-		new_lineset->linestyle->id.us++;
+		id_us_plus(&new_lineset->linestyle->id);
 	new_lineset->flags = lineset->flags;
 	new_lineset->selection = lineset->selection;
 	new_lineset->qi = lineset->qi;
@@ -117,7 +118,7 @@ static void copy_lineset(FreestyleLineSet *new_lineset, FreestyleLineSet *linese
 	new_lineset->exclude_edge_types = lineset->exclude_edge_types;
 	new_lineset->group = lineset->group;
 	if (new_lineset->group) {
-		new_lineset->group->id.us++;
+		id_us_plus(&new_lineset->group->id);
 	}
 	strcpy(new_lineset->name, lineset->name);
 }
@@ -215,10 +216,10 @@ bool BKE_freestyle_lineset_delete(FreestyleConfig *config, FreestyleLineSet *lin
 	if (BLI_findindex(&config->linesets, lineset) == -1)
 		return false;
 	if (lineset->group) {
-		lineset->group->id.us--;
+		id_us_min(&lineset->group->id);
 	}
 	if (lineset->linestyle) {
-		lineset->linestyle->id.us--;
+		id_us_min(&lineset->linestyle->id);
 	}
 	BLI_remlink(&config->linesets, lineset);
 	MEM_freeN(lineset);
diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c
index 4d83f8c..86d010f 100644
--- a/source/blender/blenkernel/intern/idprop.c
+++ b/source/blender/blenkernel/intern/idprop.c
@@ -439,14 +439,15 @@ void IDP_FreeString(IDProperty *prop)
  * \{ */
 void IDP_LinkID(IDProperty *prop, ID *id)
 {
-	if (prop->data.pointer) ((ID *)prop->data.pointer)->us--;
+	if (prop->data.pointer)
+		id_us_min(((ID *)prop->data.pointer));
 	prop->data.pointer = id;
 	id_us_plus(id);
 }
 
 void IDP_UnlinkID(IDProperty *prop)
 {
-	((ID *)prop->data.pointer)->us--;
+	id_us_min(((ID *)prop->data.pointer));
 }
 /** \} */
 
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index ff30543..9dabe6b 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -552,8 +552,8 @@ void BKE_image_make_local(struct Image *ima)
 			if (tex->id.lib == NULL) {
 				if (tex->ima == ima) {
 					tex->ima = ima_new;
-					ima_new->id.us++;
-					ima->id.us--;
+					id_us_plus(&ima_new->id);
+					id_us_min(&ima->id);
 				}
 			}
 			tex = tex->id.next;
@@ -563,8 +563,8 @@ void BKE_image_make_local(struct Image *ima)
 			if (brush->id.lib == NULL) {
 				if (brush->clone.image == ima) {
 					brush->clone.image = ima_new;
-					ima_new->id.us++;
-					ima->id.us--;
+					id_us_plus(&ima_new->id);
+					id_us_min(&ima->id);
 				}
 			}
 			brush = brush->id.next;
@@ -744,7 +744,7 @@ Image *BKE_image_load_exists_ex(const char *filepath, bool *r_exists)
 				if ((BKE_image_has_anim(ima) == false) ||
 				    (ima->id.us == 0))
 				{
-					ima->id.us++;  /* officially should not, it doesn't link here! */
+					id_us_plus(&ima->id);  /* officially should not, it doesn't link he

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list