/* * (C) 2021 by sysmocom s.f.m.c. GmbH * All Rights Reserved * * Author: Pau Espin Pedrol * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ /*! \addtogroup thread * @{ * \file thread.c */ /*! \file thread.c */ #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 #include #include /*! Wrapper around Linux's gettid() to make it easily accessible on different system versions. * If the gettid() API cannot be found, it will use the syscall directly if * available. If no syscall is found available, then getpid() is called as * fallback. See 'man 2 gettid' for further and details information. * \returns This call is always successful and returns returns the thread ID of * the calling thread (or the process ID of the current process if * gettid() or its syscall are unavailable in the system). */ pid_t osmo_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 }