[Bf-blender-cvs] [e02e47cc72a] uuid-id: Fixes to Session uuids.
Bastien Montagne
noreply at git.blender.org
Mon Mar 2 17:59:44 CET 2020
Commit: e02e47cc72ae96bfecc5aef7f0500f247d3bd2fa
Author: Bastien Montagne
Date: Mon Mar 2 17:58:05 2020 +0100
Branches: uuid-id
https://developer.blender.org/rBe02e47cc72ae96bfecc5aef7f0500f247d3bd2fa
Fixes to Session uuids.
Do not assign new session uuid if ID already has one.
Only re-use existing session uuids from read IDs in undo case. Regular
file loading requires a full reset of the uuids.
===================================================================
M source/blender/blenkernel/BKE_lib_id.h
M source/blender/blenkernel/intern/lib_id.c
M source/blender/blenkernel/intern/main_idmap.c
M source/blender/blenloader/intern/readfile.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_lib_id.h b/source/blender/blenkernel/BKE_lib_id.h
index 1980f53ddbd..5b9559e36c2 100644
--- a/source/blender/blenkernel/BKE_lib_id.h
+++ b/source/blender/blenkernel/BKE_lib_id.h
@@ -70,7 +70,7 @@ void BKE_libblock_init_empty(struct ID *id) ATTR_NONNULL(1);
/* *** ID's session_uuid management. *** */
/* When an ID's uuid is of that value, it is unset/invalid (e.g. for runtime IDs, etc.). */
-#define BKE_MAIN_ID_UUID_UNSET 0
+#define MAIN_ID_SESSION_UUID_UNSET 0
void BKE_lib_libblock_uuid_generate(struct ID *id);
diff --git a/source/blender/blenkernel/intern/lib_id.c b/source/blender/blenkernel/intern/lib_id.c
index 448ad754615..df2146b3655 100644
--- a/source/blender/blenkernel/intern/lib_id.c
+++ b/source/blender/blenkernel/intern/lib_id.c
@@ -1381,7 +1381,9 @@ static uint session_uuid = 0;
/** Generate a session-wise uuid for the given \a id. */
void BKE_lib_libblock_uuid_generate(ID *id)
{
- id->session_uuid = ++session_uuid;
+ if (id->session_uuid == MAIN_ID_SESSION_UUID_UNSET) {
+ id->session_uuid = ++session_uuid;
+ }
}
/**
diff --git a/source/blender/blenkernel/intern/main_idmap.c b/source/blender/blenkernel/intern/main_idmap.c
index 42ba4559295..26eb0b681a1 100644
--- a/source/blender/blenkernel/intern/main_idmap.c
+++ b/source/blender/blenkernel/intern/main_idmap.c
@@ -119,7 +119,7 @@ struct IDNameLib_Map *BKE_main_idmap_create(struct Main *bmain,
ID *id;
id_map->uuid_map = BLI_ghash_int_new(__func__);
FOREACH_MAIN_ID_BEGIN (bmain, id) {
- BLI_assert(id->session_uuid != BKE_MAIN_ID_UUID_UNSET);
+ BLI_assert(id->session_uuid != MAIN_ID_SESSION_UUID_UNSET);
void **id_ptr_v;
const bool existing_key = BLI_ghash_ensure_p(
id_map->uuid_map, POINTER_FROM_UINT(id->session_uuid), &id_ptr_v);
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 7a1c9623b19..47e22287aca 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -9017,6 +9017,12 @@ static BHead *read_libblock(FileData *fd,
BLI_addtail(lb, id);
+ if (fd->memfile == NULL) {
+ /* When actually reading a file , we do want to reset/re-generate session uuids.
+ * In unod case, we want to re-use existing ones. */
+ id->session_uuid = MAIN_ID_SESSION_UUID_UNSET;
+ }
+
BKE_lib_libblock_uuid_generate(id);
}
else {
More information about the Bf-blender-cvs
mailing list