apply clang-tidy modernize-use-override
[folly.git] / folly / ThreadName.cpp
index 3e2d9aab189218a34db1a0b5067ccaa7eb69fc6a..22ead20917e83f9ab58255c333b37eab3b437cdf 100644 (file)
@@ -57,6 +57,21 @@ bool canSetOtherThreadName() {
 #endif
 }
 
+static constexpr size_t kMaxThreadNameLength = 16;
+
+Optional<std::string> getCurrentThreadName() {
+#if FOLLY_HAS_PTHREAD_SETNAME_NP_THREAD_NAME || \
+    FOLLY_HAS_PTHREAD_SETNAME_NP_NAME
+  std::array<char, kMaxThreadNameLength> buf;
+  if (pthread_getname_np(pthread_self(), buf.data(), buf.size()) != 0) {
+    return Optional<std::string>();
+  }
+  return make_optional(std::string(buf.data()));
+#else
+  return Optional<std::string>();
+#endif
+}
+
 bool setThreadName(std::thread::id tid, StringPiece name) {
 #if !FOLLY_HAVE_PTHREAD || _WIN32
   return false;
@@ -73,13 +88,14 @@ bool setThreadName(std::thread::id tid, StringPiece name) {
   // extract it.
   pthread_t id;
   std::memcpy(&id, &tid, sizeof(id));
+  auto trimmedName = name.fbstr().substr(0, kMaxThreadNameLength - 1);
 #if FOLLY_HAS_PTHREAD_SETNAME_NP_THREAD_NAME
-  return 0 == pthread_setname_np(id, name.fbstr().substr(0, 15).c_str());
+  return 0 == pthread_setname_np(id, trimmedName.c_str());
 #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(name.fbstr().c_str());
+    return 0 == pthread_setname_np(trimmedName.c_str());
   }
   return false;
 #else
@@ -90,6 +106,10 @@ bool setThreadName(std::thread::id tid, StringPiece name) {
 
 #if FOLLY_HAVE_PTHREAD
 bool setThreadName(pthread_t pid, StringPiece name) {
+#if _WIN32
+  // Not currently supported on Windows.
+  return false;
+#else
   static_assert(
       std::is_same<pthread_t, std::thread::native_handle_type>::value,
       "This assumes that the native handle type is pthread_t");
@@ -103,6 +123,7 @@ bool setThreadName(pthread_t pid, StringPiece name) {
   std::thread::id id;
   std::memcpy(&id, &pid, sizeof(id));
   return setThreadName(id, name);
+#endif
 }
 #endif