summaryrefslogtreecommitdiffstats
path: root/base/platform_thread_mac.mm
diff options
context:
space:
mode:
Diffstat (limited to 'base/platform_thread_mac.mm')
-rw-r--r--base/platform_thread_mac.mm21
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