From 8e0fd8cd7c0cb01fa45b8628e3cd016c4f2b309e Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Wed, 8 Oct 2014 08:48:43 +0000 Subject: [PATCH] Unix/Process: Don't use pthread_sigmask if we aren't built with threads We won't link in pthreads if we weren't built with LLVM_ENABLE_THREADS which means we won't get access to pthread_sigmask. Use sigprocmask instead. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219288 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/Unix/Process.inc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/Support/Unix/Process.inc b/lib/Support/Unix/Process.inc index 0d84bee54d3..93b93ba2596 100644 --- a/lib/Support/Unix/Process.inc +++ b/lib/Support/Unix/Process.inc @@ -268,8 +268,13 @@ std::error_code Process::SafelyCloseFileDescriptor(int FD) { return std::error_code(errno, std::generic_category()); // Atomically swap our current signal mask with a full mask. sigset_t SavedSet; +#if LLVM_ENABLE_THREADS if (int EC = pthread_sigmask(SIG_SETMASK, &FullSet, &SavedSet)) return std::error_code(EC, std::generic_category()); +#else + if (sigprocmask(SIG_SETMASK, &FullSet, &SavedSet) < 0) + return std::error_code(errno, std::generic_category()); +#endif // Attempt to close the file descriptor. // We need to save the error, if one occurs, because our subsequent call to // pthread_sigmask might tamper with errno. @@ -277,7 +282,13 @@ std::error_code Process::SafelyCloseFileDescriptor(int FD) { if (::close(FD) < 0) ErrnoFromClose = errno; // Restore the signal mask back to what we saved earlier. - int EC = pthread_sigmask(SIG_SETMASK, &SavedSet, nullptr); + int EC = 0; +#if LLVM_ENABLE_THREADS + EC = pthread_sigmask(SIG_SETMASK, &SavedSet, nullptr); +#else + if (sigprocmask(SIG_SETMASK, &SavedSet, nullptr) < 0) + EC = errno; +#endif // The error code from close takes precedence over the one from // pthread_sigmask. if (ErrnoFromClose)