aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Support/Unix/Threading.inc
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2017-03-04 18:53:09 +0000
committerZachary Turner <zturner@google.com>2017-03-04 18:53:09 +0000
commit1f004c43d2478af6c8ec0df72fa2f3283eff8c91 (patch)
tree78960380bf3161dac2a30c2a2c3befcf766d6d54 /llvm/lib/Support/Unix/Threading.inc
parent898c241b26d166e7981875a71eb925468d393d5c (diff)
downloadllvm-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.inc19
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