[Bf-blender-cvs] [11860508bd4] id-ensure-unique-memory-address: id-unique system: add also realloc utils.
Bastien Montagne
noreply at git.blender.org
Fri Feb 21 15:50:50 CET 2020
Commit: 11860508bd4adc0dbee6fd22f2fb93be6702f46d
Author: Bastien Montagne
Date: Thu Feb 20 14:24:10 2020 +0100
Branches: id-ensure-unique-memory-address
https://developer.blender.org/rB11860508bd4adc0dbee6fd22f2fb93be6702f46d
id-unique system: add also realloc utils.
===================================================================
M source/blender/blenkernel/BKE_main.h
M source/blender/blenkernel/intern/main.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index d2b0c77bbae..702dcb68c5c 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -173,6 +173,13 @@ void *BKE_main_idmemset_unique_alloc(struct Main *bmain,
void *(*alloc_cb)(size_t len, const char *str),
size_t size,
const char *message);
+void *BKE_main_idmemset_unique_realloc(struct Main *bmain,
+ void *vmemh,
+ void *(*realloc_cb)(void *vmemh,
+ size_t len,
+ const char *str),
+ size_t size,
+ const char *message);
void BKE_main_relations_create(struct Main *bmain, const short flag);
void BKE_main_relations_free(struct Main *bmain);
diff --git a/source/blender/blenkernel/intern/main.c b/source/blender/blenkernel/intern/main.c
index 732d57e622a..bf7d7fc00ab 100644
--- a/source/blender/blenkernel/intern/main.c
+++ b/source/blender/blenkernel/intern/main.c
@@ -278,6 +278,28 @@ void *BKE_main_idmemset_unique_alloc(Main *bmain,
return id_mem;
}
+void *BKE_main_idmemset_unique_realloc(Main *bmain,
+ void *vmemh,
+ void *(*realloc_cb)(void *vmemh,
+ size_t len,
+ const char *str),
+ size_t size,
+ const char *message)
+{
+ void *id_mem = realloc_cb(vmemh, size, message);
+ if (bmain != NULL && bmain->used_id_memset != NULL) {
+ ListBase generated_ids = {.first = NULL};
+ int count = 0;
+ while (UNLIKELY(!BKE_main_idmemset_register_id(bmain, id_mem))) {
+ printf("Allocating ID re-used memory address %p, trying again (%d)...\n", id_mem, ++count);
+ BLI_addtail(&generated_ids, id_mem);
+ id_mem = realloc_cb(id_mem, size, message);
+ }
+ BLI_freelistN(&generated_ids);
+ }
+ return id_mem;
+}
+
static int main_relations_create_idlink_cb(LibraryIDLinkCallbackData *cb_data)
{
MainIDRelations *rel = cb_data->user_data;
More information about the Bf-blender-cvs
mailing list