diff options
author | Harald Welte <laforge@osmocom.org> | 2022-03-28 15:38:28 +0200 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2022-03-28 15:55:50 +0200 |
commit | 0a728cff01acc8479b976dd5276f32d9192033af (patch) | |
tree | 64eae7a83be56d19c73995a368553e2a83902fe0 | |
parent | libosmovty: Link libosmovty against libpthread (diff) | |
download | libosmocore-laforge/openwrt.tar.xz libosmocore-laforge/openwrt.zip |
vty: Support platforms that don't support pthread_getname_np()laforge/openwrt
pthread_getname_np() is a non-portable extension of pthreads. While
it exists in glibc, for example musl didn't have it until rather
recently (April 2021) and there still hasn't yet been a musl release
with this change, resulting even current OpenWRT not yet supporting
pthread_getname_np.
So let's check if pthread_getname_np is supported, and only use it
in that case.
Change-Id: Ibd01485af24e2fe574006f8d049bf37226dda966
-rw-r--r-- | configure.ac | 18 | ||||
-rw-r--r-- | src/vty/cpu_sched_vty.c | 4 |
2 files changed, 22 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index 89615fdf..5bd686ae 100644 --- a/configure.ac +++ b/configure.ac @@ -78,6 +78,24 @@ AC_SUBST(BACKTRACE_LIB) # check for pthread (PTHREAD_CFLAGS, PTHREAD_LIBS) AX_PTHREAD +AC_MSG_CHECKING(for pthread_getname_np(pthread_t, char*, size_t)) +saved_CFLAGS="$CFLAGS" +saved_LIBS="$LIBS" +CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +LIBS="$LIBS $PTHREAD_LIBS" +AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#define _GNU_SOURCE + #include <pthread.h>], + [pthread_getname_np(pthread_self(),"example",0)])], + [AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PTHREAD_GETNAME_NP,1, + [Have function pthread_setname_np(const char*)])], + [AC_MSG_RESULT(no)]) +CFLAGS="$saved_CFLAGS" +LIBS="$saved_LIBS" + + # check for old glibc < 2.17 to get clock_gettime AC_SEARCH_LIBS([clock_gettime], [rt posix4], [AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [Define if clock_gettime is available]) diff --git a/src/vty/cpu_sched_vty.c b/src/vty/cpu_sched_vty.c index 0b4b2492..dbb3cd59 100644 --- a/src/vty/cpu_sched_vty.c +++ b/src/vty/cpu_sched_vty.c @@ -25,6 +25,8 @@ #define _GNU_SOURCE +#include "../../config.h" + #include <string.h> #include <stdlib.h> #include <errno.h> @@ -637,8 +639,10 @@ int osmo_cpu_sched_vty_apply_localthread(void) return 0; } +#ifdef HAVE_PTHREAD_GETNAME_NP if (pthread_getname_np(pthread_self(), name, sizeof(name)) == 0) has_name = true; +#endif /* Get latest matching mask for the thread */ pthread_mutex_lock(&sched_vty_opts->cpu_affinity_li_mutex); |