diff options
Diffstat (limited to 'llvm/lib/Support/Unix/Threading.inc')
-rw-r--r-- | llvm/lib/Support/Unix/Threading.inc | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/llvm/lib/Support/Unix/Threading.inc b/llvm/lib/Support/Unix/Threading.inc index 2c528bd..407b194 100644 --- a/llvm/lib/Support/Unix/Threading.inc +++ b/llvm/lib/Support/Unix/Threading.inc @@ -106,7 +106,7 @@ uint64_t llvm::get_threadid() { } -constexpr uint32_t llvm::get_max_thread_name_length() { +static constexpr uint32_t get_max_thread_name_length_impl() { #if defined(__NetBSD__) return PTHREAD_MAX_NAMELEN_NP; #elif defined(__APPLE__) @@ -124,6 +124,10 @@ constexpr uint32_t llvm::get_max_thread_name_length() { #endif } +uint32_t llvm::get_max_thread_name_length() { + return get_max_thread_name_length_impl(); +} + void llvm::set_thread_name(const Twine &Name) { // Make sure the input is null terminated. SmallString<64> Storage; @@ -134,7 +138,8 @@ void llvm::set_thread_name(const Twine &Name) { // terminated, but additionally the end of a long thread name will usually // be more unique than the beginning, since a common pattern is for similar // threads to share a common prefix. - NameStr = NameStr.take_back(get_max_thread_name_length()); + if (get_max_thread_name_length() > 0) + NameStr = NameStr.take_back(get_max_thread_name_length()); (void)NameStr; #if defined(__linux__) #if (defined(__GLIBC__) && defined(_GNU_SOURCE)) || defined(__ANDROID__) @@ -192,15 +197,17 @@ void llvm::get_thread_name(SmallVectorImpl<char> &Name) { free(kp); return; #elif defined(__NetBSD__) - char buf[get_max_thread_name_length()]; - ::pthread_getname_np(::pthread_self(), buf, PTHREAD_MAX_NAMELEN_NP); + constexpr uint32_t len = get_max_thread_name_length_impl(); + char buf[len]; + ::pthread_getname_np(::pthread_self(), buf, len); Name.append(buf, buf + strlen(buf)); #elif defined(__linux__) #if (defined(__GLIBC__) && defined(_GNU_SOURCE)) || defined(__ANDROID__) #if HAVE_PTHREAD_GETNAME_NP - char Buffer[get_max_thread_name_length()]; - if (0 == ::pthread_getname_np(::pthread_self(), Buffer, MAXNAMELEN)) + constexpr uint32_t len = get_max_thread_name_length_impl(); + char Buffer[len]; + if (0 == ::pthread_getname_np(::pthread_self(), Buffer, len)) Name.append(Buffer, Buffer + strlen(Buffer)); #endif #endif |