diff options
author | Brecht Van Lommel <brecht@blender.org> | 2021-10-28 16:46:20 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2021-10-28 17:01:07 +0300 |
commit | 3620ce7f67874b8d891a41b66714112bed7a23a2 (patch) | |
tree | be09f91b18dedeeff7e614c239b0ddc53f7c95eb /intern | |
parent | cefb0122b4973d8311955a163de4cf16b475edc1 (diff) |
Fix T92503: Cycles OSL crash with material previews
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/scene/osl.cpp | 11 |
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; |