diff options
-rw-r--r-- | CommonLibs/debug.c | 24 | ||||
-rw-r--r-- | CommonLibs/debug.h | 8 | ||||
-rw-r--r-- | configure.ac | 9 |
3 files changed, 37 insertions, 4 deletions
diff --git a/CommonLibs/debug.c b/CommonLibs/debug.c index c227435..5e09079 100644 --- a/CommonLibs/debug.c +++ b/CommonLibs/debug.c @@ -21,7 +21,17 @@ * See the COPYING file in the main directory for details. */ -#include <pthread.h> +#include "config.h" + +/* If HAVE_GETTID, then "_GNU_SOURCE" may need to be defined to use gettid() */ +#if HAVE_GETTID +#define _GNU_SOURCE +#endif + +#include <sys/types.h> +#include <unistd.h> +#include <sys/syscall.h> +#include "config.h" #include <osmocom/core/logging.h> #include <osmocom/core/utils.h> @@ -77,3 +87,15 @@ const struct log_info log_info = { .cat = default_categories, .num_cat = ARRAY_SIZE(default_categories), }; + +pid_t my_gettid(void) +{ +#if HAVE_GETTID + return gettid(); +#elif defined(LINUX) && defined(__NR_gettid) + return (pid_t) syscall(__NR_gettid); +#else + #pragma message ("use pid as tid") + return getpid(); +#endif +} diff --git a/CommonLibs/debug.h b/CommonLibs/debug.h index 0dca2ee..9f118b5 100644 --- a/CommonLibs/debug.h +++ b/CommonLibs/debug.h @@ -1,7 +1,7 @@ #pragma once #include <stdbool.h> -#include <pthread.h> +#include <sys/types.h> #include <osmocom/core/logging.h> @@ -18,10 +18,12 @@ enum { DDEVDRV, }; +pid_t my_gettid(void); + #define CLOGC(category, level, fmt, args...) do { \ - LOGP(category, level, "[tid=%lu] " fmt, pthread_self(), ##args); \ + LOGP(category, level, "[tid=%ld] " fmt, (long int) my_gettid(), ##args); \ } while(0) #define CLOGCHAN(chan, category, level, fmt, args...) do { \ - LOGP(category, level, "[tid=%lu][chan=%lu] " fmt, pthread_self(), chan, ##args); \ + LOGP(category, level, "[tid=%ld][chan=%lu] " fmt, (long int) my_gettid(), chan, ##args); \ } while(0) diff --git a/configure.ac b/configure.ac index b0be728..76c3515 100644 --- a/configure.ac +++ b/configure.ac @@ -75,6 +75,15 @@ AC_TYPE_SIZE_T AC_HEADER_TIME AC_C_BIGENDIAN +# Check if gettid is available (despite not being documented in glibc doc, it requires __USE_GNU on some systems) +# C compiler is used since __USE_GNU seems to be always defined for g++. +save_CPPFLAGS=$CPPFLAGS +AC_LANG_PUSH(C) +CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" +AC_CHECK_FUNCS([gettid]) +AC_LANG_POP(C) +CPPFLAGS=$save_CPPFLAGS + PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.3.0) PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.3.0) PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.3.0) |