diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2018-09-20 18:04:46 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-09-28 23:17:57 +0000 |
commit | 5b60c98769ba297053801a3192187ebdd558698a (patch) | |
tree | d820183c9b7ec21088aa842a0f743938576c9da3 /CommonLibs | |
parent | 207d8a26246eb095425487c2bb3e8a0ca101340e (diff) |
Use pthread_setname_np to name threads
osmo-trx can start a considerable amount of threads that can make
debugging it challenging at least. By using phtread_setname_np, the
system sets a meaningful name to the thread which can be seen while
debugging with gdb or by printing /proc/$pid/task/$tid/comm.
Now we also log system TID when setting the name so we can identify
different tasks in /proc even if pthread_setname_np fails.
Change-Id: I84711739c3e224cb383fd12b6db933785b28209e
Diffstat (limited to 'CommonLibs')
-rw-r--r-- | CommonLibs/Threads.cpp | 23 | ||||
-rw-r--r-- | CommonLibs/Threads.h | 2 |
2 files changed, 23 insertions, 2 deletions
diff --git a/CommonLibs/Threads.cpp b/CommonLibs/Threads.cpp index de6520b..2988e12 100644 --- a/CommonLibs/Threads.cpp +++ b/CommonLibs/Threads.cpp @@ -24,11 +24,17 @@ */ - - +#include <string.h> +#include <sys/types.h> #include "Threads.h" #include "Timeval.h" +#include "Logger.h" + +#ifndef gettid +#include <sys/syscall.h> +#define gettid() syscall(SYS_gettid) +#endif using namespace std; @@ -102,6 +108,19 @@ void Signal::wait(Mutex& wMutex, unsigned timeout) const pthread_cond_timedwait(&mSignal,&wMutex.mMutex,&waitTime); } +void set_selfthread_name(const char *name) +{ + pthread_t selfid = pthread_self(); + pid_t tid = gettid(); + if (pthread_setname_np(selfid, name) == 0) { + LOG(INFO) << "Thread "<< selfid << " (task " << tid << ") set name: " << name; + } else { + char buf[256]; + int err = errno; + char* err_str = strerror_r(err, buf, sizeof(buf)); + LOG(NOTICE) << "Thread "<< selfid << " (task " << tid << ") set name \"" << name << "\" failed: (" << err << ") " << err_str; + } +} void Thread::start(void *(*task)(void*), void *arg) { diff --git a/CommonLibs/Threads.h b/CommonLibs/Threads.h index 47c7275..857c5d9 100644 --- a/CommonLibs/Threads.h +++ b/CommonLibs/Threads.h @@ -141,6 +141,8 @@ class Signal { #define START_THREAD(thread,function,argument) \ thread.start((void *(*)(void*))function, (void*)argument); +void set_selfthread_name(const char *name); + /** A C++ wrapper for pthread threads. */ class Thread { |