Fix T36474: Blender 2.68a crashes upon rendering

Summary:
Original issue was caused by wring detection of whether
SS modifier is being applied for render/viewport. After
recent dependency graph commit this was no longer an
issue.

But it still might have happen conflict between viewport
draw and scene_update_for_newframe() invoked from render
thread when using external engines like Cycles.

Solved by adding viewport lock while scene is being
updated and objects being exported to the render engine.

Same lock was already used for Blender Internal.

Reviewers: brecht

Reviewed By: brecht

Maniphest Tasks: T36474

Differential Revision: https://developer.blender.org/D138
This commit is contained in:
Sergey Sharybin 2013-12-27 18:52:41 +06:00
parent 8632aab88d
commit 602dcb47b0
Notes: blender-bot 2023-02-14 11:56:16 +01:00
Referenced by issue #37136, Cloth render crash on frame 1 only
Referenced by issue #36474, *AFTER 2.69* Blender 2.68a crashes upon rendering for both Win7/OSX 10.7
1 changed files with 17 additions and 2 deletions

View File

@ -423,6 +423,11 @@ int RE_engine_render(Render *re, int do_all)
if (!do_all && (type->flag & RE_USE_POSTPROCESS))
return 0;
/* Lock drawing in UI during data phase. */
if (re->draw_lock) {
re->draw_lock(re->dlh, 1);
}
/* update animation here so any render layer animation is applied before
* creating the render result */
if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0) {
@ -476,8 +481,13 @@ int RE_engine_render(Render *re, int do_all)
}
BLI_rw_mutex_unlock(&re->resultmutex);
if (re->result == NULL)
if (re->result == NULL) {
/* Clear UI drawing locks. */
if (re->draw_lock) {
re->draw_lock(re->dlh, 0);
}
return 1;
}
/* set render info */
re->i.cfra = re->scene->r.cfra;
@ -515,7 +525,12 @@ int RE_engine_render(Render *re, int do_all)
if (type->update)
type->update(engine, re->main, re->scene);
/* Clear UI drawing locks. */
if (re->draw_lock) {
re->draw_lock(re->dlh, 0);
}
if (type->render)
type->render(engine, re->scene);