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:
authorSergey Sharybin <sergey@blender.org>2021-01-28 12:34:33 +0300
committerSergey Sharybin <sergey@blender.org>2021-01-28 12:34:33 +0300
commit9fdb32bf5154b4b1405f6436881c11f64b92a35e (patch)
tree542d4b09cb6191cbabdcf517f9a0d5739136f23e
parent39cfc95c2cc3829d6dbc5e1f6fdda3a0e053ed4d (diff)
parent61d1fd7e2f8b972b903fa6684114a13f652fd507 (diff)
Merge branch 'blender-v2.92-release'
-rw-r--r--source/blender/depsgraph/intern/depsgraph.cc8
-rw-r--r--source/blender/depsgraph/intern/depsgraph_tag.cc4
2 files changed, 12 insertions, 0 deletions
diff --git a/source/blender/depsgraph/intern/depsgraph.cc b/source/blender/depsgraph/intern/depsgraph.cc
index 17eeba55a27..3d30e7e79b9 100644
--- a/source/blender/depsgraph/intern/depsgraph.cc
+++ b/source/blender/depsgraph/intern/depsgraph.cc
@@ -142,6 +142,14 @@ static void clear_id_nodes_conditional(Depsgraph::IDDepsNodes *id_nodes, const F
* datablock for her own dirty needs. */
continue;
}
+ if (id_node->id_cow == id_node->id_orig) {
+ /* Copy-on-write version is not needed for this ID type.
+ *
+ * NOTE: Is important to not de-reference the original datablock here because it might be
+ * freed already (happens during main database free when some IDs are freed prior to a
+ * scene). */
+ continue;
+ }
if (!deg_copy_on_write_is_expanded(id_node->id_cow)) {
continue;
}
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc
index 95ee8234ef3..c60ec4351bc 100644
--- a/source/blender/depsgraph/intern/depsgraph_tag.cc
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cc
@@ -265,6 +265,10 @@ void depsgraph_update_editors_tag(Main *bmain, Depsgraph *graph, ID *id)
void depsgraph_id_tag_copy_on_write(Depsgraph *graph, IDNode *id_node, eUpdateSource update_source)
{
ComponentNode *cow_comp = id_node->find_component(NodeType::COPY_ON_WRITE);
+ if (cow_comp == nullptr) {
+ BLI_assert(!deg_copy_on_write_is_needed(GS(id_node->id_orig->name)));
+ return;
+ }
cow_comp->tag_update(graph, update_source);
}