[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