[Bf-blender-cvs] [42aef16] master: Fix T41197: Blender freezes to infinite loop when switching to PAUSED Cycles rendered viewport

Sergey Sharybin noreply at git.blender.org
Fri Aug 1 12:59:06 CEST 2014


Commit: 42aef164f44e90df0e85cea4361c0537d11c925d
Author: Sergey Sharybin
Date:   Fri Aug 1 16:39:05 2014 +0600
Branches: master
https://developer.blender.org/rB42aef164f44e90df0e85cea4361c0537d11c925d

Fix T41197: Blender freezes to infinite loop when switching to PAUSED Cycles rendered viewport

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

M	intern/cycles/blender/blender_session.cpp

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

diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 37aab76..7e104d5 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -88,6 +88,7 @@ void BlenderSession::create_session()
 {
 	SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background);
 	SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background);
+	bool session_pause = BlenderSync::get_session_pause(b_scene, background);
 
 	/* reset status/progress */
 	last_status = "";
@@ -107,15 +108,17 @@ void BlenderSession::create_session()
 	session->scene = scene;
 	session->progress.set_update_callback(function_bind(&BlenderSession::tag_redraw, this));
 	session->progress.set_cancel_callback(function_bind(&BlenderSession::test_cancel, this));
-	session->set_pause(BlenderSync::get_session_pause(b_scene, background));
+	session->set_pause(session_pause);
 
 	/* create sync */
 	sync = new BlenderSync(b_engine, b_data, b_scene, scene, !background, session->progress, session_params.device.type == DEVICE_CPU);
 
 	if(b_v3d) {
-		/* full data sync */
-		sync->sync_data(b_v3d, b_engine.camera_override(), &python_thread_state);
-		sync->sync_view(b_v3d, b_rv3d, width, height);
+		if(session_pause == false) {
+			/* full data sync */
+			sync->sync_data(b_v3d, b_engine.camera_override(), &python_thread_state);
+			sync->sync_view(b_v3d, b_rv3d, width, height);
+		}
 	}
 	else {
 		/* for final render we will do full data sync per render layer, only
@@ -627,6 +630,7 @@ void BlenderSession::synchronize()
 	/* on session/scene parameter changes, we recreate session entirely */
 	SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background);
 	SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background);
+	bool session_pause = BlenderSync::get_session_pause(b_scene, background);
 
 	if(session->params.modified(session_params) ||
 	   scene->params.modified(scene_params))
@@ -639,12 +643,18 @@ void BlenderSession::synchronize()
 
 	/* increase samples, but never decrease */
 	session->set_samples(session_params.samples);
-	session->set_pause(BlenderSync::get_session_pause(b_scene, background));
+	session->set_pause(session_pause);
 
 	/* copy recalc flags, outside of mutex so we can decide to do the real
 	 * synchronization at a later time to not block on running updates */
 	sync->sync_recalc();
 
+	/* don't do synchronization if on pause */
+	if(session_pause) {
+		tag_update();
+		return;
+	}
+
 	/* try to acquire mutex. if we don't want to or can't, come back later */
 	if(!session->ready_to_reset() || !session->scene->mutex.try_lock()) {
 		tag_update();
@@ -720,10 +730,12 @@ bool BlenderSession::draw(int w, int h)
 		if(reset) {
 			SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background);
 			BufferParams buffer_params = BlenderSync::get_buffer_params(b_render, b_scene, b_v3d, b_rv3d, scene->camera, width, height);
+			bool session_pause = BlenderSync::get_session_pause(b_scene, background);
 
-			session->reset(buffer_params, session_params.samples);
-
-			start_resize_time = 0.0;
+			if(session_pause == false) {
+				session->reset(buffer_params, session_params.samples);
+				start_resize_time = 0.0;
+			}
 		}
 	}
 	else {




More information about the Bf-blender-cvs mailing list