OSDN Git Service

Unix/Process: Don't use pthread_sigmask if we aren't built with threads
authorDavid Majnemer <david.majnemer@gmail.com>
Wed, 8 Oct 2014 08:48:43 +0000 (08:48 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Wed, 8 Oct 2014 08:48:43 +0000 (08:48 +0000)
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

index 0d84bee..93b93ba 100644 (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)