[Bf-blender-cvs] [fa1d5586a1a] master: Fix Freestyle (ASAN detected) crash
Dalai Felinto
noreply at git.blender.org
Fri Jan 25 17:58:43 CET 2019
Commit: fa1d5586a1ad53cb6529d05d7dcbb7d5a22de780
Author: Dalai Felinto
Date: Fri Jan 25 14:54:36 2019 -0200
Branches: master
https://developer.blender.org/rBfa1d5586a1ad53cb6529d05d7dcbb7d5a22de780
Fix Freestyle (ASAN detected) crash
This was very simple to reproduce, just turn on Freestyle and press render.
Now to the truth of things. Most (if not all) of
~BlenderStrokeRenderer() can be removed. I believe this was done back
when freestyle was using G.main, and since we gave freestyle its own
main we can just leave the cleanup for later.
I will leave this for freestyle maintainers to think over though.
Note: There is a chance this was the issue reported on T57890. I will
wait for the reporter to confirm this as fixed though.
===================================================================
M source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
===================================================================
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
index d033e1a0133..3eaca723045 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
@@ -185,10 +185,11 @@ BlenderStrokeRenderer::~BlenderStrokeRenderer()
// compositor has finished.
// release objects and data blocks
+ Base *base_next = NULL;
ViewLayer *view_layer = (ViewLayer *)freestyle_scene->view_layers.first;
- for (Base *b = (Base *)view_layer->object_bases.first; b; b = b->next) {
+ for (Base *b = (Base *)view_layer->object_bases.first; b; b = base_next) {
+ base_next = b->next;
Object *ob = b->object;
- void *data = ob->data;
char *name = ob->id.name;
#if 0
if (G.debug & G_DEBUG_FREESTYLE) {
@@ -196,23 +197,20 @@ BlenderStrokeRenderer::~BlenderStrokeRenderer()
}
#endif
switch (ob->type) {
- case OB_MESH:
- BKE_id_free(freestyle_bmain, ob);
- BKE_id_free(freestyle_bmain, data);
- break;
case OB_CAMERA:
- BKE_id_free(freestyle_bmain, ob);
- BKE_id_free(freestyle_bmain, data);
freestyle_scene->camera = NULL;
+ ATTR_FALLTHROUGH;
+ case OB_MESH:
+ BKE_scene_collections_object_remove(freestyle_bmain,
+ freestyle_scene,
+ ob,
+ true);
break;
default:
cerr << "Warning: unexpected object in the scene: " << name[0] << name[1] << ":" << (name + 2) << endl;
}
}
- // Make sure we don't have any bases which might reference freed objects.
- BKE_main_collection_sync(freestyle_bmain);
-
// release materials
Link *lnk = (Link *)freestyle_bmain->mat.first;
More information about the Bf-blender-cvs
mailing list