[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