[Bf-blender-cvs] [1064b74] master: Fix for an occasional crash in Freestyle stroke rendering.

Tamito Kajiyama noreply at git.blender.org
Fri May 9 05:22:34 CEST 2014


Commit: 1064b74196dc50bc4924e9196fdf5a872f74f6cc
Author: Tamito Kajiyama
Date:   Fri May 9 11:38:36 2014 +0900
https://developer.blender.org/rB1064b74196dc50bc4924e9196fdf5a872f74f6cc

Fix for an occasional crash in Freestyle stroke rendering.

Materials were freed before releasing meshes that may have references to the materials.

===================================================================

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 9a356f4..d0dfd47 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
@@ -137,25 +137,6 @@ BlenderStrokeRenderer::BlenderStrokeRenderer(Render *re, int render_count) : Str
 
 BlenderStrokeRenderer::~BlenderStrokeRenderer()
 {
-	// release materials
-	Link *lnk = (Link *)freestyle_bmain->mat.first;
-
-	while (lnk)
-	{
-		Material *ma = (Material*)lnk;
-		// We want to retain the linestyle mtexs, so let's detach them first
-		for (int a = 0; a < MAX_MTEX; a++) {
-			if (ma->mtex[a]) {
-				ma->mtex[a] = NULL;
-			}
-			else {
-				break; // Textures are ordered, no empty slots between two textures
-			}
-		}
-		lnk = lnk->next;
-		BKE_libblock_free(freestyle_bmain, ma);
-	}
-
 	// The freestyle_scene object is not released here.  Instead,
 	// the scene is released in free_all_freestyle_renders() in
 	// source/blender/render/intern/source/pipeline.c, after the
@@ -186,6 +167,25 @@ BlenderStrokeRenderer::~BlenderStrokeRenderer()
 		}
 	}
 	BLI_freelistN(&freestyle_scene->base);
+
+	// release materials
+	Link *lnk = (Link *)freestyle_bmain->mat.first;
+
+	while (lnk)
+	{
+		Material *ma = (Material*)lnk;
+		// We want to retain the linestyle mtexs, so let's detach them first
+		for (int a = 0; a < MAX_MTEX; a++) {
+			if (ma->mtex[a]) {
+				ma->mtex[a] = NULL;
+			}
+			else {
+				break; // Textures are ordered, no empty slots between two textures
+			}
+		}
+		lnk = lnk->next;
+		BKE_libblock_free(freestyle_bmain, ma);
+	}
 }
 
 float BlenderStrokeRenderer::get_stroke_vertex_z(void) const




More information about the Bf-blender-cvs mailing list