From 90adf2aa597acfcfc42d37ae16a73c2d81d70868 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 26 May 2021 09:52:00 +1000 Subject: [PATCH] perfschema: use glibc gettid if available --- cmake/os/WindowsCache.cmake | 1 + storage/perfschema/CMakeLists.txt | 3 +++ storage/perfschema/my_thread.h | 11 +++++++---- storage/perfschema/pfs_config.h.cmake | 1 + 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cmake/os/WindowsCache.cmake b/cmake/os/WindowsCache.cmake index e9b9e18772252..e2a4aa9e52003 100644 --- a/cmake/os/WindowsCache.cmake +++ b/cmake/os/WindowsCache.cmake @@ -322,6 +322,7 @@ SET(HAVE_SCHED_GETCPU CACHE INTERNAL "") SET(HAVE_NANOSLEEP CACHE INTERNAL "") SET(HAVE_PTHREAD_THREADID_NP CACHE INTERNAL "") SET(HAVE_SYS_GETTID CACHE INTERNAL "") +SET(HAVE_GETTID CACHE INTERNAL "") SET(HAVE_INTEGER_PTHREAD_SELF CACHE INTERNAL "") SET(HAVE_PTHREAD_GETTHREADID_NP CACHE INTERNAL "") SET(HAVE_TIMER_DELETE CACHE INTERNAL "") diff --git a/storage/perfschema/CMakeLists.txt b/storage/perfschema/CMakeLists.txt index 98d3e2a401d36..d5625afbb1a2a 100644 --- a/storage/perfschema/CMakeLists.txt +++ b/storage/perfschema/CMakeLists.txt @@ -290,6 +290,9 @@ int main(int ac, char **av) }" HAVE_PTHREAD_THREADID_NP) +# gettid() library function (glibc-2.30+) +CHECK_SYMBOL_EXISTS(gettid unistd.h HAVE_GETTID) + # Check for gettid() system call CHECK_C_SOURCE_COMPILES(" #include diff --git a/storage/perfschema/my_thread.h b/storage/perfschema/my_thread.h index 2f3a17db2b750..7f6b162401618 100644 --- a/storage/perfschema/my_thread.h +++ b/storage/perfschema/my_thread.h @@ -50,12 +50,14 @@ static inline my_thread_os_id_t my_thread_os_id() pthread_threadid_np(nullptr, &tid64); return (pid_t)tid64; #else +#ifdef HAVE_GETTID + /* Linux glibc-2.30+ */ + return gettid(); +#else #ifdef HAVE_SYS_GETTID /* - Linux. + Linux before glibc-2.30 See man gettid - See GLIBC Bug 6399 - gettid() should have a wrapper - https://sourceware.org/bugzilla/show_bug.cgi?id=6399 */ return syscall(SYS_gettid); #else @@ -82,7 +84,8 @@ static inline my_thread_os_id_t my_thread_os_id() #endif /* HAVE_PTHREAD_GETTHREADID_NP */ #endif /* _WIN32 */ #endif /* HAVE_SYS_GETTID */ -#endif /* HAVE_SYS_THREAD_SELFID */ +#endif /* HAVE_GETTID */ +#endif /* HAVE_PTHREAD_THREADID_NP */ } #define CHANNEL_NAME_LENGTH MAX_CONNECTION_NAME diff --git a/storage/perfschema/pfs_config.h.cmake b/storage/perfschema/pfs_config.h.cmake index 1b518fe321104..2b61b7e170edb 100644 --- a/storage/perfschema/pfs_config.h.cmake +++ b/storage/perfschema/pfs_config.h.cmake @@ -1,5 +1,6 @@ #cmakedefine HAVE_PTHREAD_THREADID_NP 1 #cmakedefine HAVE_SYS_GETTID 1 +#cmakedefine HAVE_GETTID #cmakedefine HAVE_GETTHRID 1 #cmakedefine HAVE_PTHREAD_GETTHREADID_NP 1 #cmakedefine HAVE_INTEGER_PTHREAD_SELF 1