[Bf-blender-cvs] [1a79abd] master: Fix more of T38726: there still was a crash when deleting render layers.

Brecht Van Lommel noreply at git.blender.org
Fri Feb 21 16:40:48 CET 2014


Commit: 1a79abdad2443ff9f12e7efd95ee78a264a9d60a
Author: Brecht Van Lommel
Date:   Fri Feb 21 16:35:23 2014 +0100
https://developer.blender.org/rB1a79abdad2443ff9f12e7efd95ee78a264a9d60a

Fix more of T38726: there still was a crash when deleting render layers.

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

M	source/blender/render/intern/source/pipeline.c
M	source/blender/render/intern/source/render_result.c

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

diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index e381a7e..4cf3682 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -230,7 +230,7 @@ static int render_scene_needs_vector(Render *re)
 {
 	SceneRenderLayer *srl;
 	
-	for (srl = re->scene->r.layers.first; srl; srl = srl->next)
+	for (srl = re->r.layers.first; srl; srl = srl->next)
 		if (!(srl->layflag & SCE_LAY_DISABLE))
 			if (srl->passflag & SCE_PASS_VECTOR)
 				return 1;
@@ -412,6 +412,8 @@ void RE_FreeRender(Render *re)
 		RE_engine_free(re->engine);
 
 	BLI_rw_mutex_end(&re->resultmutex);
+
+	BLI_freelistN(&re->r.layers);
 	
 	/* main dbase can already be invalid now, some database-free code checks it */
 	re->main = NULL;
@@ -508,7 +510,11 @@ void RE_InitState(Render *re, Render *source, RenderData *rd, SceneRenderLayer *
 	re->ok = TRUE;   /* maybe flag */
 	
 	re->i.starttime = PIL_check_seconds_timer();
-	re->r = *rd;     /* hardcopy */
+
+	/* copy render data and render layers for thread safety */
+	BLI_freelistN(&re->r.layers);
+	re->r = *rd;
+	BLI_duplicatelist(&re->r.layers, &rd->layers);
 
 	if (source) {
 		/* reuse border flags from source renderer */
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c
index b174748..f2c5a75 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -868,7 +868,7 @@ void render_result_single_layer_end(Render *re)
 		BLI_remlink(&re->result->layers, rl);
 		
 		/* reconstruct render result layers */
-		for (nr = 0, srl = re->scene->r.layers.first; srl; srl = srl->next, nr++) {
+		for (nr = 0, srl = re->r.layers.first; srl; srl = srl->next, nr++) {
 			if (nr == re->r.actlay) {
 				BLI_addtail(&re->result->layers, rl);
 			}




More information about the Bf-blender-cvs mailing list