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
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2014-05-19 21:17:57 +0400
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2014-05-19 21:33:09 +0400
commit0d9e6a736a410991ef9a11ef87c8d23c96199823 (patch)
treea0697ab87d06e685be81e3452348a7fd0eade07b /intern/cycles/render
parente97a186ffe0c3cca4a9d3edbf899f14a5de44edc (diff)
Fix T40262: cycles GPU bake crash due to kernels not loaded, randomly due to thread timing.
Diffstat (limited to 'intern/cycles/render')
-rw-r--r--intern/cycles/render/session.cpp12
-rw-r--r--intern/cycles/render/session.h3
2 files changed, 13 insertions, 2 deletions
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 28b44df6b36..9fcd9fa85f5 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -592,9 +592,10 @@ void Session::run_cpu()
update_progressive_refine(true);
}
-void Session::run()
+void Session::load_kernels()
{
- /* load kernels */
+ thread_scoped_lock scene_lock(scene->mutex);
+
if(!kernels_loaded) {
progress.set_status("Loading render kernels (may take a few minutes the first time)");
@@ -603,6 +604,7 @@ void Session::run()
if(message.empty())
message = "Failed loading render kernel, see console for errors";
+ progress.set_cancel(message);
progress.set_status("Error", message);
progress.set_update();
return;
@@ -610,6 +612,12 @@ void Session::run()
kernels_loaded = true;
}
+}
+
+void Session::run()
+{
+ /* load kernels */
+ load_kernels();
/* session thread loop */
progress.set_status("Waiting for render to start");
diff --git a/intern/cycles/render/session.h b/intern/cycles/render/session.h
index 4638bb8cc37..9da7a0aafa3 100644
--- a/intern/cycles/render/session.h
+++ b/intern/cycles/render/session.h
@@ -138,7 +138,10 @@ public:
void set_pause(bool pause);
void update_scene();
+ void load_kernels();
+
void device_free();
+
protected:
struct DelayedReset {
thread_mutex mutex;