| Index: base/platform_thread_mac.mm
|
| diff --git a/base/platform_thread_mac.mm b/base/platform_thread_mac.mm
|
| index 46ac2416fec28e60edca3c7ffadb3c1abd3013cc..d155b3233e050918a65dc23b3305ca54b0221bc3 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
|
| @@ -46,3 +48,22 @@ void InitThreading() {
|
| }
|
|
|
| } // namespace base
|
| +
|
| +// 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);
|
| +}
|
|
|