diff options
Diffstat (limited to 'intern/cycles/util/util_thread.cpp')
-rw-r--r-- | intern/cycles/util/util_thread.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/intern/cycles/util/util_thread.cpp b/intern/cycles/util/util_thread.cpp index 4d30e3f564f..f3c6077f6b7 100644 --- a/intern/cycles/util/util_thread.cpp +++ b/intern/cycles/util/util_thread.cpp @@ -26,7 +26,17 @@ thread::thread(function<void()> run_cb, int node) joined_(false), node_(node) { - thread_ = std::thread(&thread::run, this); +#ifdef __APPLE__ + /* Set the stack size to 2MB to match Linux. The default 512KB on macOS is + * too small for Embree, and consistent stack size also makes things more + * predictable in general. */ + pthread_attr_t attribute; + pthread_attr_init(&attribute); + pthread_attr_setstacksize(&attribute, 1024*1024*2); + pthread_create(&pthread_id, &attribute, run, (void*)this); +#else + std_thread = std::thread(&thread::run, this); +#endif } thread::~thread() @@ -49,13 +59,17 @@ void *thread::run(void *arg) bool thread::join() { joined_ = true; +#ifdef __APPLE__ + return pthread_join(pthread_id, NULL) == 0; +#else try { - thread_.join(); + std_thread.join(); return true; } catch (const std::system_error&) { return false; } +#endif } CCL_NAMESPACE_END |