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; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs