[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