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:
authorKévin Dietrich <kevin.dietrich@mailoo.org>2021-02-03 08:43:38 +0300
committerKévin Dietrich <kevin.dietrich@mailoo.org>2021-02-03 21:15:49 +0300
commit55c88e5582009317b185ffe71749f70cb586fa9d (patch)
tree649f5c1fd71c37a02b41aa1ad18e4e432df5b610
parent9734a78bc81b0565d605577ea9a9ff9752b50d13 (diff)
Alembic procedural: fix crash when cancelling a render during
synchronization
-rw-r--r--intern/cycles/render/alembic.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/intern/cycles/render/alembic.cpp b/intern/cycles/render/alembic.cpp
index e0e50d99f84..a9d43415865 100644
--- a/intern/cycles/render/alembic.cpp
+++ b/intern/cycles/render/alembic.cpp
@@ -1317,12 +1317,24 @@ AlembicProcedural::~AlembicProcedural()
foreach (Node *node, objects) {
AlembicObject *abc_object = static_cast<AlembicObject *>(node);
- objects_set.insert(abc_object->get_object());
- geometries_set.insert(abc_object->get_object()->get_geometry());
+ if (abc_object->get_object()) {
+ objects_set.insert(abc_object->get_object());
+
+ if (abc_object->get_object()->get_geometry()) {
+ geometries_set.insert(abc_object->get_object()->get_geometry());
+ }
+ }
delete_node(abc_object);
}
+ /* We may delete a Procedural before rendering started, so scene_ can be null. */
+ if (!scene_) {
+ assert(geometries_set.empty());
+ assert(objects_set.empty());
+ return;
+ }
+
scene_->delete_nodes(geometries_set, this);
scene_->delete_nodes(objects_set, this);
}