From a0b3124f80f5696cbf070b3b714533ab4012398d Mon Sep 17 00:00:00 2001 From: James Le Cuirot Date: Tue, 10 Mar 2020 21:10:48 +0000 Subject: [PATCH] Use -pthread flag and simplify pthread build logic Sometimes -lpthread is not enough. This has caused build failures on Gentoo Linux in the past. The logic also seems needlessly complex. We check for HAVE_PTHREAD on UNIX platforms even though CMake errors out if pthreads are not found. Similarly, we have a fallback for HAVE_PTHREAD_SIGNAL being false even though we always set it to true. --- CMakeLists.txt | 11 ++++------- res/config.h.in | 6 ------ src/lib/arch/Arch.h | 4 +--- src/lib/arch/unix/ArchMultithreadPosix.cpp | 13 ------------- 4 files changed, 5 insertions(+), 29 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e10776e..ae7ccb21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,12 +123,10 @@ if (UNIX) check_type_size (short SIZEOF_SHORT) # pthread is used on both Linux and Mac - check_library_exists ("pthread" pthread_create "" HAVE_PTHREAD) - if (HAVE_PTHREAD) - list (APPEND libs pthread) - else() - message (FATAL_ERROR "Missing library: pthread") - endif() + set (CMAKE_THREAD_PREFER_PTHREAD TRUE) + set (THREADS_PREFER_PTHREAD_FLAG TRUE) + find_package (Threads REQUIRED) + list (APPEND libs Threads::Threads) # curl is used on both Linux and Mac find_package (CURL) @@ -269,7 +267,6 @@ if (UNIX) set (HAVE_CXX_EXCEPTIONS 1) set (HAVE_CXX_MUTABLE 1) set (HAVE_CXX_STDLIB 1) - set (HAVE_PTHREAD_SIGNAL 1) set (SELECT_TYPE_ARG1 int) set (SELECT_TYPE_ARG234 " (fd_set *)") set (SELECT_TYPE_ARG5 " (struct timeval *)") diff --git a/res/config.h.in b/res/config.h.in index f3a72449..2bd3b3bf 100644 --- a/res/config.h.in +++ b/res/config.h.in @@ -55,12 +55,6 @@ /* Define if you have a POSIX `sigwait` function. */ #cmakedefine HAVE_POSIX_SIGWAIT ${HAVE_POSIX_SIGWAIT} -/* Define if you have POSIX threads libraries and header files. */ -#cmakedefine HAVE_PTHREAD ${HAVE_PTHREAD} - -/* Define if you have `pthread_sigmask` and `pthread_kill` functions. */ -#cmakedefine HAVE_PTHREAD_SIGNAL ${HAVE_PTHREAD_SIGNAL} - /* Define if your compiler defines socklen_t. */ #cmakedefine HAVE_SOCKLEN_T ${HAVE_SOCKLEN_T} diff --git a/src/lib/arch/Arch.h b/src/lib/arch/Arch.h index c062d6f3..940a2e3a 100644 --- a/src/lib/arch/Arch.h +++ b/src/lib/arch/Arch.h @@ -54,9 +54,7 @@ # include "arch/unix/ArchConsoleUnix.h" # include "arch/unix/ArchDaemonUnix.h" # include "arch/unix/ArchLogUnix.h" -# if HAVE_PTHREAD -# include "arch/unix/ArchMultithreadPosix.h" -# endif +# include "arch/unix/ArchMultithreadPosix.h" # include "arch/unix/ArchNetworkBSD.h" # include "arch/unix/ArchSleepUnix.h" # include "arch/unix/ArchStringUnix.h" diff --git a/src/lib/arch/unix/ArchMultithreadPosix.cpp b/src/lib/arch/unix/ArchMultithreadPosix.cpp index c9ddc6ce..4866edce 100644 --- a/src/lib/arch/unix/ArchMultithreadPosix.cpp +++ b/src/lib/arch/unix/ArchMultithreadPosix.cpp @@ -36,17 +36,6 @@ #define SIGWAKEUP SIGUSR1 -#if !HAVE_PTHREAD_SIGNAL - // boy, is this platform broken. forget about pthread signal - // handling and let signals through to every process. barrier - // will not terminate cleanly when it gets SIGTERM or SIGINT. -# define pthread_sigmask sigprocmask -# define pthread_kill(tid_, sig_) kill(0, (sig_)) -# define sigwait(set_, sig_) -# undef HAVE_POSIX_SIGWAIT -# define HAVE_POSIX_SIGWAIT 1 -#endif - static void setSignalSet(sigset_t* sigset) @@ -344,9 +333,7 @@ ArchMultithreadPosix::newThread(ThreadFunc func, void* data) // can't tell the difference. if (!m_newThreadCalled) { m_newThreadCalled = true; -#if HAVE_PTHREAD_SIGNAL startSignalHandler(); -#endif } // note that the child thread will wait until we release this mutex -- 2.24.1