setThreadName: abbreviate thread name if too long

This commit is contained in:
Guenter Obiltschnig
2015-09-28 22:46:31 +02:00
parent eda81a5fe2
commit 06ab1e9820

View File

@@ -38,6 +38,8 @@
#if POCO_OS == POCO_OS_LINUX #if POCO_OS == POCO_OS_LINUX
#include <sys/syscall.h> #include <sys/syscall.h>
#endif #endif
#include <cstring>
// //
// Block SIGPIPE in main thread. // Block SIGPIPE in main thread.
@@ -69,18 +71,26 @@ static SignalBlocker signalBlocker;
namespace { namespace {
void setThreadName(pthread_t thread, const char* threadName) void setThreadName(pthread_t thread, const std::string& threadName)
{ {
# if (POCO_OS == POCO_OS_MAC_OS_X) #if (POCO_OS == POCO_OS_MAC_OS_X)
pthread_setname_np(threadName); // __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2) pthread_setname_np(threadName.c_str()); // __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2)
# else #else
pthread_setname_np(thread, threadName); if (pthread_setname_np(thread, threadName.c_str()))
# endif {
} char truncName[16] = {0};
} std::size_t suffixIndex = threadName.length() - 7;
std::memcpy(truncName, &threadName[0], 7);
truncName[7] = '~';
memcpy(&truncName[8], &threadName[suffixIndex], 7);
pthread_setname_np(thread, truncName);
}
#endif #endif
}
}
#endif // POCO_POSIX_DEBUGGER_THREAD_NAMES
namespace Poco { namespace Poco {
@@ -448,7 +458,7 @@ void* ThreadImpl::runnableEntry(void* pThread)
ThreadImpl* pThreadImpl = reinterpret_cast<ThreadImpl*>(pThread); ThreadImpl* pThreadImpl = reinterpret_cast<ThreadImpl*>(pThread);
#if defined(POCO_POSIX_DEBUGGER_THREAD_NAMES) #if defined(POCO_POSIX_DEBUGGER_THREAD_NAMES)
setThreadName(pThreadImpl->_pData->thread, reinterpret_cast<Thread*>(pThread)->getName().c_str()); setThreadName(pThreadImpl->_pData->thread, reinterpret_cast<Thread*>(pThread)->getName());
#endif #endif
#if POCO_OS == POCO_OS_LINUX #if POCO_OS == POCO_OS_LINUX
pThreadImpl->_pData->tid = static_cast<TIDImpl>( syscall (SYS_gettid) ); pThreadImpl->_pData->tid = static_cast<TIDImpl>( syscall (SYS_gettid) );