mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-26 18:42:41 +01:00
setThreadName: abbreviate thread name if too long
This commit is contained in:
@@ -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) );
|
||||||
|
|||||||
Reference in New Issue
Block a user