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
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2014-02-21 19:35:23 +0400
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2014-02-21 19:38:19 +0400
commit1a79abdad2443ff9f12e7efd95ee78a264a9d60a (patch)
tree23ded0f47774f5ce840e77b47664b9f1d39bcea9 /source
parentc0e0b612228088301c140738bbe8077c63d0363b (diff)
Fix more of T38726: there still was a crash when deleting render layers.
Diffstat (limited to 'source')
-rw-r--r--source/blender/render/intern/source/pipeline.c10
-rw-r--r--source/blender/render/intern/source/render_result.c2
2 files changed, 9 insertions, 3 deletions
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index e381a7ea6f5..4cf36826bba 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 b174748a050..f2c5a7597b8 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);
}