[Bf-blender-cvs] [d9c89f1] master: Cleanup: ID usercount: moar checks and factorization. No change in behavior expected.

Bastien Montagne noreply at git.blender.org
Tue Nov 10 16:21:24 CET 2015


Commit: d9c89f175f945e5f7fb40ddd3326ceeca21ad366
Author: Bastien Montagne
Date:   Tue Nov 10 16:20:28 2015 +0100
Branches: master
https://developer.blender.org/rBd9c89f175f945e5f7fb40ddd3326ceeca21ad366

Cleanup: ID usercount: moar checks and factorization. No change in behavior expected.

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

M	source/blender/blenkernel/intern/library.c
M	source/blender/makesdna/DNA_ID.h

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

diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index b76323b..1dff424 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -163,8 +163,13 @@ void id_lib_extern(ID *id)
 void id_us_ensure_real(ID *id)
 {
 	if (id) {
-		if (ID_REAL_USERS(id) <= 0) {
-			id->us = MAX2(id->us, 0) + 1;
+		const int limit = ID_FAKE_USERS(id);
+		if (id->us <= limit) {
+			if (id->us < limit) {
+				printf("ID user count error: %s (from '%s')\n", id->name, id->lib ? id->lib->filepath : "[Main]");
+				BLI_assert(0);
+			}
+			id->us = limit + 1;
 		}
 	}
 }
@@ -172,6 +177,7 @@ void id_us_ensure_real(ID *id)
 void id_us_plus(ID *id)
 {
 	if (id) {
+		BLI_assert(id->us >= 0);
 		id->us++;
 		if (id->flag & LIB_INDIRECT) {
 			id->flag -= LIB_INDIRECT;
@@ -184,7 +190,7 @@ void id_us_plus(ID *id)
 void id_us_min(ID *id)
 {
 	if (id) {
-		const int limit = (id->flag & LIB_FAKEUSER) ? 1 : 0;
+		const int limit = ID_FAKE_USERS(id);
 		if (id->us <= limit) {
 			printf("ID user decrement error: %s (from '%s')\n", id->name, id->lib ? id->lib->filepath : "[Main]");
 			BLI_assert(0);
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index 9aff8d7..1d140f9 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -254,7 +254,8 @@ typedef struct PreviewImage {
 			/* fluidsim Ipo */
 #define ID_FLUIDSIM	MAKE_ID2('F', 'S')
 
-#define ID_REAL_USERS(id) (((ID *)id)->us - ((((ID *)id)->flag & LIB_FAKEUSER) ? 1 : 0))
+#define ID_FAKE_USERS(id) ((((ID *)id)->flag & LIB_FAKEUSER) ? 1 : 0)
+#define ID_REAL_USERS(id) (((ID *)id)->us - ID_FAKE_USERS(id))
 
 #define ID_CHECK_UNDO(id) ((GS((id)->name) != ID_SCR) && (GS((id)->name) != ID_WM))




More information about the Bf-blender-cvs mailing list