diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-02-21 19:35:23 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-02-21 19:38:19 +0400 |
commit | 1a79abdad2443ff9f12e7efd95ee78a264a9d60a (patch) | |
tree | 23ded0f47774f5ce840e77b47664b9f1d39bcea9 /source | |
parent | c0e0b612228088301c140738bbe8077c63d0363b (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.c | 10 | ||||
-rw-r--r-- | source/blender/render/intern/source/render_result.c | 2 |
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); } |