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 <brecht@blender.org>2021-10-28 16:46:20 +0300
committerBrecht Van Lommel <brecht@blender.org>2021-10-28 17:01:07 +0300
commit3620ce7f67874b8d891a41b66714112bed7a23a2 (patch)
treebe09f91b18dedeeff7e614c239b0ddc53f7c95eb
parentcefb0122b4973d8311955a163de4cf16b475edc1 (diff)
Fix T92503: Cycles OSL crash with material previews
-rw-r--r--intern/cycles/scene/osl.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/intern/cycles/scene/osl.cpp b/intern/cycles/scene/osl.cpp
index 09626cb48bb..c5f38d4f270 100644
--- a/intern/cycles/scene/osl.cpp
+++ b/intern/cycles/scene/osl.cpp
@@ -326,17 +326,22 @@ bool OSLShaderManager::osl_compile(const string &inputfile, const string &output
string stdosl_path;
string shader_path = path_get("shader");
- /* specify output file name */
+ /* Specify output file name. */
options.push_back("-o");
options.push_back(outputfile);
- /* specify standard include path */
+ /* Specify standard include path. */
string include_path_arg = string("-I") + shader_path;
options.push_back(include_path_arg);
stdosl_path = path_join(shader_path, "stdcycles.h");
- /* compile */
+ /* Compile.
+ *
+ * Mutex protected because the OSL compiler does not appear to be thread safe, see T92503. */
+ static thread_mutex osl_compiler_mutex;
+ thread_scoped_lock lock(osl_compiler_mutex);
+
OSL::OSLCompiler *compiler = new OSL::OSLCompiler(&OSL::ErrorHandler::default_handler());
bool ok = compiler->compile(string_view(inputfile), options, string_view(stdosl_path));
delete compiler;