[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