Workarounds and documentation of OSX posix incompatibilities

This commit is contained in:
Vojtech Bubnik 2020-10-22 14:57:50 +02:00
parent 723406dfea
commit d8f45ff1d8
3 changed files with 9 additions and 2 deletions

View File

@ -213,8 +213,11 @@ std::string AppConfig::load()
void AppConfig::save() void AppConfig::save()
{ {
#ifndef __APPLE__
// Apple does not implement thread_getname_np() correctly.
if (get_current_thread_name() != "slic3r_main") if (get_current_thread_name() != "slic3r_main")
throw CriticalException("Calling AppConfig::save() from a worker thread!"); throw CriticalException("Calling AppConfig::save() from a worker thread!");
#endif
// The config is first written to a file with a PID suffix and then moved // The config is first written to a file with a PID suffix and then moved
// to avoid race conditions with multiple instances of Slic3r // to avoid race conditions with multiple instances of Slic3r

View File

@ -116,8 +116,10 @@ void set_current_thread_name(const char *thread_name)
std::string get_current_thread_name() std::string get_current_thread_name()
{ {
char buf[16]; // not supported
return std::string(thread_getname_np(buf, 16) == 0 ? buf : ""); // char buf[16];
// return std::string(thread_getname_np(buf, 16) == 0 ? buf : "");
throw CriticalException("Not supported");
} }
#else #else

View File

@ -10,6 +10,7 @@ namespace Slic3r {
// Set / get thread name. // Set / get thread name.
// pthread_setname_np supports maximum 15 character thread names! (16th character is the null terminator) // pthread_setname_np supports maximum 15 character thread names! (16th character is the null terminator)
// Methods taking the thread as an argument are not supported by OSX.
void set_thread_name(std::thread &thread, const char *thread_name); void set_thread_name(std::thread &thread, const char *thread_name);
inline void set_thread_name(std::thread &thread, const std::string &thread_name) { set_thread_name(thread, thread_name.c_str()); } inline void set_thread_name(std::thread &thread, const std::string &thread_name) { set_thread_name(thread, thread_name.c_str()); }
void set_thread_name(boost::thread &thread, const char *thread_name); void set_thread_name(boost::thread &thread, const char *thread_name);
@ -17,6 +18,7 @@ inline void set_thread_name(boost::thread &thread, const std::string &thread_nam
void set_current_thread_name(const char *thread_name); void set_current_thread_name(const char *thread_name);
inline void set_current_thread_name(const std::string &thread_name) { set_current_thread_name(thread_name.c_str()); } inline void set_current_thread_name(const std::string &thread_name) { set_current_thread_name(thread_name.c_str()); }
// Not supported by OSX.
std::string get_current_thread_name(); std::string get_current_thread_name();
// To be called somewhere before the TBB threads are spinned for the first time, to // To be called somewhere before the TBB threads are spinned for the first time, to