[llvm] r296976 - Try to fix thread name truncation on non-Windows.
Zachary Turner via llvm-commits
llvm-commits at lists.llvm.org
Sat Mar 4 10:53:10 PST 2017
Author: zturner
Date: Sat Mar 4 12:53:09 2017
New Revision: 296976
URL: http://llvm.org/viewvc/llvm-project?rev=296976&view=rev
Log:
Try to fix thread name truncation on non-Windows.
Modified:
llvm/trunk/include/llvm/Support/Threading.h
llvm/trunk/lib/Support/Threading.cpp
llvm/trunk/lib/Support/Unix/Threading.inc
llvm/trunk/lib/Support/Windows/Threading.inc
Modified: llvm/trunk/include/llvm/Support/Threading.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Threading.h?rev=296976&r1=296975&r2=296976&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/Threading.h (original)
+++ llvm/trunk/include/llvm/Support/Threading.h Sat Mar 4 12:53:09 2017
@@ -139,7 +139,7 @@ void llvm_execute_on_thread(void (*UserF
/// \brief Get the maximum length of a thread name on this platform.
/// A value of 0 means there is no limit.
- constexpr uint32_t get_max_thread_name_length();
+ uint32_t get_max_thread_name_length();
/// \brief Set the name of the current thread. Setting a thread's name can
/// be helpful for enabling useful diagnostics under a debugger or when
Modified: llvm/trunk/lib/Support/Threading.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Threading.cpp?rev=296976&r1=296975&r2=296976&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Threading.cpp (original)
+++ llvm/trunk/lib/Support/Threading.cpp Sat Mar 4 12:53:09 2017
@@ -49,6 +49,8 @@ unsigned llvm::heavyweight_hardware_conc
uint64_t llvm::get_threadid() { return 0; }
+uint32_t llvm::get_max_thread_name_length() { return 0; }
+
void llvm::set_thread_name(const Twine &Name) {}
void llvm::get_thread_name(SmallVectorImpl<char> &Name) { Name.clear(); }
Modified: llvm/trunk/lib/Support/Unix/Threading.inc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Threading.inc?rev=296976&r1=296975&r2=296976&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Unix/Threading.inc (original)
+++ llvm/trunk/lib/Support/Unix/Threading.inc Sat Mar 4 12:53:09 2017
@@ -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_
#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 &
// 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(SmallVectorIm
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
Modified: llvm/trunk/lib/Support/Windows/Threading.inc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Threading.inc?rev=296976&r1=296975&r2=296976&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Windows/Threading.inc (original)
+++ llvm/trunk/lib/Support/Windows/Threading.inc Sat Mar 4 12:53:09 2017
@@ -59,7 +59,7 @@ uint64_t llvm::get_threadid() {
return uint64_t(::GetCurrentThreadId());
}
-constexpr uint32_t llvm::get_max_thread_name_length() { return 0; }
+uint32_t llvm::get_max_thread_name_length() { return 0; }
void llvm::set_thread_name(const Twine &Name) {
#if defined(_MSC_VER)
More information about the llvm-commits
mailing list