[pulseaudio-discuss] [PATCH 4/8] thread-posix: use pthread_(get|set)name_np() if available
Daniel Mack
zonque at gmail.com
Fri Apr 22 05:27:40 PDT 2011
Newer generations of libpthread have functions to set and get the thread
names. If available, use them.
---
configure.ac | 4 +++-
src/pulsecore/thread-posix.c | 15 ++++++++++++---
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/configure.ac b/configure.ac
index e2b5a6a..6f262fb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -448,6 +448,8 @@ AC_SEARCH_LIBS([shm_open], [rt])
AC_SEARCH_LIBS([inet_ntop], [nsl])
AC_SEARCH_LIBS([timer_create], [rt])
AC_SEARCH_LIBS([pthread_setaffinity_np], [pthread])
+AC_SEARCH_LIBS([pthread_getname_np], [pthread])
+AC_SEARCH_LIBS([pthread_setname_np], [pthread])
# BSD
AC_SEARCH_LIBS([connect], [socket])
@@ -489,7 +491,7 @@ AC_FUNC_SELECT_ARGTYPES
AC_CHECK_FUNCS_ONCE([chmod chown fstat fchown fchmod clock_gettime getaddrinfo getgrgid_r getgrnam_r \
getpwnam_r getpwuid_r gettimeofday getuid mlock nanosleep \
pipe posix_fadvise posix_madvise posix_memalign setpgid setsid shm_open \
- sigaction sleep symlink sysconf uname pthread_setaffinity_np])
+ sigaction sleep symlink sysconf uname pthread_setaffinity_np pthread_getname_np pthread_setname_np])
AC_CHECK_FUNCS([mkfifo], [HAVE_MKFIFO=1], [HAVE_MKFIFO=0])
AM_CONDITIONAL(HAVE_MKFIFO, test "x$HAVE_MKFIFO" = "x1")
diff --git a/src/pulsecore/thread-posix.c b/src/pulsecore/thread-posix.c
index 7d5252d..ae73267 100644
--- a/src/pulsecore/thread-posix.c
+++ b/src/pulsecore/thread-posix.c
@@ -71,7 +71,9 @@ static void* internal_thread_func(void *userdata) {
pa_thread *t = userdata;
pa_assert(t);
-#ifdef __linux__
+#ifdef HAVE_PTHREAD_SETNAME_NP
+ pthread_setname_np(t->name);
+#elif defined(__linux__)
prctl(PR_SET_NAME, t->name);
#endif
@@ -175,7 +177,9 @@ void pa_thread_set_name(pa_thread *t, const char *name) {
pa_xfree(t->name);
t->name = pa_xstrdup(name);
-#ifdef __linux__
+#ifdef HAVE_PTHREAD_SETNAME_NP
+ pthread_setname_np(name);
+#elif defined(__linux__)
prctl(PR_SET_NAME, name);
#endif
}
@@ -183,7 +187,12 @@ void pa_thread_set_name(pa_thread *t, const char *name) {
const char *pa_thread_get_name(pa_thread *t) {
pa_assert(t);
-#ifdef __linux__
+#ifdef HAVE_PTHREAD_GETNAME_NP
+ if (!t->name) {
+ t->name = pa_xmalloc0(17);
+ pthread_getname_np(t->id, t->name, 16);
+ }
+#elif defined(__linux__)
if (!t->name) {
t->name = pa_xmalloc(17);
--
1.7.1
More information about the pulseaudio-discuss
mailing list