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.

llvm-svn: 219288
This commit is contained in:
David Majnemer 2014-10-08 08:48:43 +00:00
parent 000ef037d4
commit ecc177788f
1 changed files with 12 additions and 1 deletions

View File

@ -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)