Simplify impl of setThreadName
[folly.git] / folly / ThreadName.cpp
index 6f3115758e000ee10cf6f79e1b090862306d3890..abc7eaad6195f01b88bce12e17bddc8ea5b84112 100644 (file)
@@ -42,7 +42,7 @@ namespace folly {
 
 namespace {
 
-#if FOLLY_HAVE_PTHREAD
+#if FOLLY_HAVE_PTHREAD && !_WIN32
 pthread_t stdTidToPthreadId(std::thread::id tid) {
   static_assert(
       std::is_same<pthread_t, std::thread::native_handle_type>::value,
@@ -102,15 +102,17 @@ bool setThreadName(std::thread::id tid, StringPiece name) {
 #if !FOLLY_HAVE_PTHREAD || _WIN32
   return false;
 #else
-  auto trimmedName = name.fbstr().substr(0, kMaxThreadNameLength - 1);
+  name = name.subpiece(0, kMaxThreadNameLength - 1);
+  char buf[kMaxThreadNameLength] = {};
+  std::memcpy(buf, name.data(), name.size());
   auto id = stdTidToPthreadId(tid);
 #if FOLLY_HAS_PTHREAD_SETNAME_NP_THREAD_NAME
-  return 0 == pthread_setname_np(id, trimmedName.c_str());
+  return 0 == pthread_setname_np(id, buf);
 #elif FOLLY_HAS_PTHREAD_SETNAME_NP_NAME
   // Since OS X 10.6 it is possible for a thread to set its own name,
   // but not that of some other thread.
   if (pthread_equal(pthread_self(), id)) {
-    return 0 == pthread_setname_np(trimmedName.c_str());
+    return 0 == pthread_setname_np(buf);
   }
   return false;
 #else