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.
This commit is contained in:
parent
e8d7cd3f10
commit
a0b3124f80
|
@ -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 *)")
|
||||
|
|
|
@ -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}
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue