diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-03-13 20:26:11 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-03-13 20:31:12 +0300 |
commit | 1be16466e7983edbe8794127141267a8099d54be (patch) | |
tree | f5178ac6ff840d8a2748e620c9a583613e44f0fe /intern | |
parent | 6a8d87db1879cc1bf96217987b52a4be2c80864c (diff) |
Fix T60434: crash with OSL and viewport + preview render at the same time.
Don't free LLVM JIT memory until process exit, there might be multiple OSL
instances using it.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/render/osl.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/render/osl.h | 2 | ||||
-rw-r--r-- | intern/cycles/render/shader.cpp | 4 |
3 files changed, 10 insertions, 0 deletions
diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp index 3fbc7d33a74..c603dc69a16 100644 --- a/intern/cycles/render/osl.cpp +++ b/intern/cycles/render/osl.cpp @@ -66,6 +66,10 @@ OSLShaderManager::~OSLShaderManager() { shading_system_free(); texture_system_free(); +} + +void OSLShaderManager::free_memory() +{ #ifdef OSL_HAS_BLENDER_CLEANUP_FIX /* There is a problem with llvm+osl: The order global destructors across * different compilation units run cannot be guaranteed, on windows this means diff --git a/intern/cycles/render/osl.h b/intern/cycles/render/osl.h index e196e0be787..93cc3139608 100644 --- a/intern/cycles/render/osl.h +++ b/intern/cycles/render/osl.h @@ -70,6 +70,8 @@ public: OSLShaderManager(); ~OSLShaderManager(); + static void free_memory(); + void reset(Scene *scene); bool use_osl() { return true; } diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp index 3ee63e91e8d..9f256a665cd 100644 --- a/intern/cycles/render/shader.cpp +++ b/intern/cycles/render/shader.cpp @@ -692,6 +692,10 @@ void ShaderManager::get_requested_features(Scene *scene, void ShaderManager::free_memory() { beckmann_table.free_memory(); + +#ifdef WITH_OSL + OSLShaderManager::free_memory(); +#endif } float ShaderManager::linear_rgb_to_gray(float3 c) |