diff options
author | Zachary Turner <zturner@google.com> | 2017-03-04 18:53:09 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2017-03-04 18:53:09 +0000 |
commit | 1f004c43d2478af6c8ec0df72fa2f3283eff8c91 (patch) | |
tree | 78960380bf3161dac2a30c2a2c3befcf766d6d54 /llvm/lib/Support/Unix/Threading.inc | |
parent | 898c241b26d166e7981875a71eb925468d393d5c (diff) | |
download | llvm-1f004c43d2478af6c8ec0df72fa2f3283eff8c91.zip llvm-1f004c43d2478af6c8ec0df72fa2f3283eff8c91.tar.gz llvm-1f004c43d2478af6c8ec0df72fa2f3283eff8c91.tar.bz2 |
Try to fix thread name truncation on non-Windows.
llvm-svn: 296976
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 |