forked from bartvdbraak/blender
Fix Cycles Embree crash on macOS, due to too small thread stack size.
This commit is contained in:
parent
93d11edd7e
commit
fb6f1aa12f
@ -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
|
||||
|
@ -41,8 +41,8 @@ typedef std::mutex thread_mutex;
|
||||
typedef std::unique_lock<std::mutex> thread_scoped_lock;
|
||||
typedef std::condition_variable thread_condition_variable;
|
||||
|
||||
/* own pthread based implementation, to avoid boost version conflicts with
|
||||
* dynamically loaded blender plugins */
|
||||
/* Own thread implementation similar to std::thread, so we can set a
|
||||
* custom stack size on macOS. */
|
||||
|
||||
class thread {
|
||||
public:
|
||||
@ -56,7 +56,11 @@ public:
|
||||
|
||||
protected:
|
||||
function<void()> run_cb_;
|
||||
std::thread thread_;
|
||||
#ifdef __APPLE__
|
||||
pthread_t pthread_id;
|
||||
#else
|
||||
std::thread std_thread;
|
||||
#endif
|
||||
bool joined_;
|
||||
int node_;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user