vty: Support platforms that don't support pthread_getname_np()

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
This commit is contained in:
Harald Welte 2022-03-28 15:38:28 +02:00 committed by laforge
parent c80a004f0b
commit c17546faff
2 changed files with 22 additions and 0 deletions

View File

@ -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])

View File

@ -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);