diff options
author | Sergey Sharybin <sergey@blender.org> | 2021-01-28 12:20:43 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey@blender.org> | 2021-01-28 12:34:18 +0300 |
commit | 61d1fd7e2f8b972b903fa6684114a13f652fd507 (patch) | |
tree | 4c9f2edc75e1f3c60b9a2750bb1b38c4d6ecbac1 /source/blender/depsgraph/intern/depsgraph.cc | |
parent | 78f7377c88b2b6f59fc3a0212d2b92f461cf5361 (diff) |
Fix T85142: BMW scene quits Blender
Technically, the crash was caused by revert which happened in
rBcd24712c2c5: it reverted some code which is essential for
rB76fd41e9db1.
Bring back the essential code for the removal of un-needed
Copy-on-Write operations, so that the crash doesn't happen.
What was causing the crash is the ID tag assuming Copy-on-Write
operation always exists.
Diffstat (limited to 'source/blender/depsgraph/intern/depsgraph.cc')
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph.cc | 8 |
1 files changed, 8 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; } |