[Bf-blender-cvs] [6728cc6fdb3] id-ensure-unique-memory-address: Merge branch 'readfile-rework-refcount-handling' into id-ensure-unique-memory-address
Bastien Montagne
noreply at git.blender.org
Fri Feb 14 14:25:08 CET 2020
Commit: 6728cc6fdb3b785b3068721786f3efe765aca8fb
Author: Bastien Montagne
Date: Fri Feb 14 14:20:00 2020 +0100
Branches: id-ensure-unique-memory-address
https://developer.blender.org/rB6728cc6fdb3b785b3068721786f3efe765aca8fb
Merge branch 'readfile-rework-refcount-handling' into id-ensure-unique-memory-address
Conflicts:
source/blender/blenkernel/intern/main.c
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/main.c
index 74ce219862c,659c3944edb..30dff086f6c
--- a/source/blender/blenkernel/intern/main.c
+++ b/source/blender/blenkernel/intern/main.c
@@@ -211,60 -209,12 +211,60 @@@ void BKE_main_unlock(struct Main *bmain
BLI_spin_unlock((SpinLock *)bmain->lock);
}
+void BKE_main_idmemset_ensure(Main *bmain)
+{
+ if (bmain->used_id_memset == NULL || (bmain->used_id_memset_tag & MAIN_IDMEMSET_OWNER) == 0) {
+ bmain->used_id_memset = BLI_gset_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
+ bmain->used_id_memset_tag |= MAIN_IDMEMSET_OWNER;
+ }
+}
+
+void BKE_main_idmemset_release(Main *bmain)
+{
+ if (bmain->used_id_memset != NULL) {
+ if ((bmain->used_id_memset_tag & MAIN_IDMEMSET_OWNER) != 0) {
+ BLI_gset_free(bmain->used_id_memset, NULL);
+ }
+ bmain->used_id_memset = NULL;
+ bmain->used_id_memset_tag &= ~MAIN_IDMEMSET_OWNER;
+ }
+}
+
+void BKE_main_idmemset_transfer_ownership(Main *bmain_dst, Main *bmain_src)
+{
+ BKE_main_idmemset_release(bmain_dst);
+
+ BLI_assert(bmain_src->used_id_memset != NULL);
+ BLI_assert(bmain_src->used_id_memset_tag & MAIN_IDMEMSET_OWNER);
+
+ bmain_dst->used_id_memset = bmain_src->used_id_memset;
+ bmain_dst->used_id_memset_tag |= MAIN_IDMEMSET_OWNER;
+ bmain_src->used_id_memset_tag &= ~MAIN_IDMEMSET_OWNER;
+}
+
+void BKE_main_idmemset_usefrom(Main *bmain_user, Main *bmain_src)
+{
+ BKE_main_idmemset_release(bmain_user);
+
+ BLI_assert(bmain_src->used_id_memset != NULL);
+ bmain_user->used_id_memset = bmain_src->used_id_memset;
+}
+
+/**
+ * @return true if the ID was successfully added to the memset, false if it already existed.
+ */
+bool BKE_main_idmemset_register_id(Main *bmain, ID *id)
+{
+ BLI_assert(bmain->used_id_memset != NULL);
+ return BLI_gset_add(bmain->used_id_memset, id);
+}
+
- static int main_relations_create_idlink_cb(void *user_data,
- ID *id_self,
- ID **id_pointer,
- int cb_flag)
+ static int main_relations_create_idlink_cb(LibraryIDLinkCallbackData *cb_data)
{
- MainIDRelations *rel = user_data;
+ MainIDRelations *rel = cb_data->user_data;
+ ID *id_self = cb_data->id_self;
+ ID **id_pointer = cb_data->id_pointer;
+ const int cb_flag = cb_data->cb_flag;
if (*id_pointer) {
MainIDRelationsEntry *entry, **entry_p;
More information about the Bf-blender-cvs
mailing list