|
38 | 38 | #if POCO_OS == POCO_OS_LINUX |
39 | 39 | #include <sys/syscall.h> |
40 | 40 | #endif |
| 41 | +#include <cstring> |
| 42 | + |
41 | 43 |
|
42 | 44 | // |
43 | 45 | // Block SIGPIPE in main thread. |
@@ -69,18 +71,26 @@ static SignalBlocker signalBlocker; |
69 | 71 |
|
70 | 72 |
|
71 | 73 | namespace { |
72 | | -void setThreadName(pthread_t thread, const char* threadName) |
| 74 | +void setThreadName(pthread_t thread, const std::string& threadName) |
73 | 75 | { |
74 | | -# if (POCO_OS == POCO_OS_MAC_OS_X) |
75 | | - pthread_setname_np(threadName); // __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2) |
76 | | -# else |
77 | | - pthread_setname_np(thread, threadName); |
78 | | -# endif |
| 76 | +#if (POCO_OS == POCO_OS_MAC_OS_X) |
| 77 | + pthread_setname_np(threadName.c_str()); // __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2) |
| 78 | +#else |
| 79 | + if (pthread_setname_np(thread, threadName.c_str())) |
| 80 | + { |
| 81 | + char truncName[16] = {0}; |
| 82 | + std::size_t suffixIndex = threadName.length() - 7; |
| 83 | + std::memcpy(truncName, &threadName[0], 7); |
| 84 | + truncName[7] = '~'; |
| 85 | + memcpy(&truncName[8], &threadName[suffixIndex], 7); |
| 86 | + pthread_setname_np(thread, truncName); |
| 87 | + } |
| 88 | +#endif |
79 | 89 | } |
80 | 90 | } |
81 | 91 |
|
82 | 92 |
|
83 | | -#endif |
| 93 | +#endif // POCO_POSIX_DEBUGGER_THREAD_NAMES |
84 | 94 |
|
85 | 95 |
|
86 | 96 | namespace Poco { |
@@ -448,7 +458,7 @@ void* ThreadImpl::runnableEntry(void* pThread) |
448 | 458 |
|
449 | 459 | ThreadImpl* pThreadImpl = reinterpret_cast<ThreadImpl*>(pThread); |
450 | 460 | #if defined(POCO_POSIX_DEBUGGER_THREAD_NAMES) |
451 | | - setThreadName(pThreadImpl->_pData->thread, reinterpret_cast<Thread*>(pThread)->getName().c_str()); |
| 461 | + setThreadName(pThreadImpl->_pData->thread, reinterpret_cast<Thread*>(pThread)->getName()); |
452 | 462 | #endif |
453 | 463 | #if POCO_OS == POCO_OS_LINUX |
454 | 464 | pThreadImpl->_pData->tid = static_cast<TIDImpl>( syscall (SYS_gettid) ); |
|
0 commit comments