aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CommonLibs/debug.c24
-rw-r--r--CommonLibs/debug.h8
-rw-r--r--configure.ac9
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)