Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2020-01-17 21:54:09 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2020-01-17 21:59:00 +0300
commit5472ae6fdff67ea26d0f9d6f76da02bcd106faf9 (patch)
treef7f851e4c7383c5681745a57f455f1a88d587d72 /source/blender/editors/object/object_relations.c
parent6744f4d108a8965425233527a3d65cc4a62848f4 (diff)
Fix memory leak when full-copying a scene after recent changes.
Once again, am not exactly sure why that was working before, and not anymore - but in any case, doing that kind of update here is not only useless (since we have to do it at the end of the whole collections/objects duplication and remapping anyway), it is also rather dangerous, as collections are currently in rather invalid states at that point of the code... Note that in ideal world, `BKE_main_collection_sync()` & co would be lazy (setting only a flag, then code actually needing this to be valid again should call some sort of `BKE_main_collection_sync_ensure()`). Then we would not have to worry about such things (and we'd get nice performance improvements in some cases, also in main remapping code, etc.). Food for some refactoring, some day...
Diffstat (limited to 'source/blender/editors/object/object_relations.c')
-rw-r--r--source/blender/editors/object/object_relations.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index b52c3f67b2f..322043d7140 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -1757,7 +1757,11 @@ static Collection *single_object_users_collection(Main *bmain,
bmain, scene, child->collection, flag, copy_collections, false);
if (is_master_collection && copy_collections && child->collection != collection_child_new) {
- BKE_collection_child_add(bmain, collection, collection_child_new);
+ /* We do not want a collection sync here, our collections are in a complete unsetled state
+ * currently. With current code, that would lead to a memory leak - because of reasons.
+ * It would be a useless loss of computing anyway, since caller has to fully refresh
+ * viewlayers/collections caching at the end. */
+ BKE_collection_child_add_no_sync(collection, collection_child_new);
BLI_remlink(&collection->children, child);
MEM_freeN(child);
if (child == orig_child_last) {