diff options
Diffstat (limited to 'base/platform_thread_mac.mm')
-rw-r--r-- | base/platform_thread_mac.mm | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/base/platform_thread_mac.mm b/base/platform_thread_mac.mm index 46ac241..62139a9 100644 --- a/base/platform_thread_mac.mm +++ b/base/platform_thread_mac.mm @@ -5,8 +5,10 @@ #include "base/platform_thread.h" #import <Foundation/Foundation.h> +#include <dlfcn.h> #include "base/logging.h" +#include "base/safe_strerror_posix.h" // A simple class that demonstrates our impressive ability to do nothing. @interface NoOp : NSObject @@ -45,4 +47,23 @@ void InitThreading() { } } +// static +void PlatformThread::SetName(const char* name) { + // pthread_setname_np is only available in 10.6 or later, so test + // for it at runtime. + int (*dynamic_pthread_setname_np)(const char*); + *reinterpret_cast<void**>(&dynamic_pthread_setname_np) = + dlsym(RTLD_DEFAULT, "pthread_setname_np"); + if (!dynamic_pthread_setname_np) + return; + + // Mac OS X does not expose the length limit of the name, so + // hardcode it. + const int kMaxNameLength = 63; + std::string shortened_name = std::string(name).substr(0, kMaxNameLength); + int err = dynamic_pthread_setname_np(shortened_name.c_str()); + if (err < 0) + LOG(ERROR) << "pthread_setname_np: " << safe_strerror(err); +} + } // namespace base |