diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Support/MemoryBuffer.cpp | 13 | ||||
| -rw-r--r-- | llvm/lib/Support/Unix/Path.inc | 12 | ||||
| -rw-r--r-- | llvm/lib/Support/Unix/Process.inc | 12 | 
3 files changed, 12 insertions, 25 deletions
diff --git a/llvm/lib/Support/MemoryBuffer.cpp b/llvm/lib/Support/MemoryBuffer.cpp index 227e792d83d..85e782b2c04 100644 --- a/llvm/lib/Support/MemoryBuffer.cpp +++ b/llvm/lib/Support/MemoryBuffer.cpp @@ -240,11 +240,9 @@ getMemoryBufferForStream(int FD, const Twine &BufferName) {    // Read into Buffer until we hit EOF.    do {      Buffer.reserve(Buffer.size() + ChunkSize); -    ReadBytes = read(FD, Buffer.end(), ChunkSize); -    if (ReadBytes == -1) { -      if (errno == EINTR) continue; +    ReadBytes = sys::RetryAfterSignal(-1, read, FD, Buffer.end(), ChunkSize); +    if (ReadBytes == -1)        return std::error_code(errno, std::generic_category()); -    }      Buffer.set_size(Buffer.size() + ReadBytes);    } while (ReadBytes != 0); @@ -391,13 +389,12 @@ getOpenFileImpl(int FD, const Twine &Filename, uint64_t FileSize,    while (BytesLeft) {  #ifdef HAVE_PREAD -    ssize_t NumRead = ::pread(FD, BufPtr, BytesLeft, MapSize-BytesLeft+Offset); +    ssize_t NumRead = sys::RetryAfterSignal(-1, ::pread, FD, BufPtr, BytesLeft, +                                            MapSize - BytesLeft + Offset);  #else -    ssize_t NumRead = ::read(FD, BufPtr, BytesLeft); +    ssize_t NumRead = sys::RetryAfterSignal(-1, ::read, FD, BufPtr, BytesLeft);  #endif      if (NumRead == -1) { -      if (errno == EINTR) -        continue;        // Error while reading.        return std::error_code(errno, std::generic_category());      } diff --git a/llvm/lib/Support/Unix/Path.inc b/llvm/lib/Support/Unix/Path.inc index b6774692595..45097eb918b 100644 --- a/llvm/lib/Support/Unix/Path.inc +++ b/llvm/lib/Support/Unix/Path.inc @@ -737,10 +737,8 @@ std::error_code openFileForRead(const Twine &Name, int &ResultFD,  #ifdef O_CLOEXEC    OpenFlags |= O_CLOEXEC;  #endif -  while ((ResultFD = open(P.begin(), OpenFlags)) < 0) { -    if (errno != EINTR) -      return std::error_code(errno, std::generic_category()); -  } +  if ((ResultFD = sys::RetryAfterSignal(-1, open, P.begin(), OpenFlags)) < 0) +    return std::error_code(errno, std::generic_category());  #ifndef O_CLOEXEC    int r = fcntl(ResultFD, F_SETFD, FD_CLOEXEC);    (void)r; @@ -800,10 +798,8 @@ std::error_code openFileForWrite(const Twine &Name, int &ResultFD,    SmallString<128> Storage;    StringRef P = Name.toNullTerminatedStringRef(Storage); -  while ((ResultFD = open(P.begin(), OpenFlags, Mode)) < 0) { -    if (errno != EINTR) -      return std::error_code(errno, std::generic_category()); -  } +  if ((ResultFD = sys::RetryAfterSignal(-1, open, P.begin(), OpenFlags, Mode)) < 0) +    return std::error_code(errno, std::generic_category());  #ifndef O_CLOEXEC    int r = fcntl(ResultFD, F_SETFD, FD_CLOEXEC);    (void)r; diff --git a/llvm/lib/Support/Unix/Process.inc b/llvm/lib/Support/Unix/Process.inc index 1d0143c6716..2d466209468 100644 --- a/llvm/lib/Support/Unix/Process.inc +++ b/llvm/lib/Support/Unix/Process.inc @@ -207,13 +207,10 @@ std::error_code Process::FixupStandardFileDescriptors() {    for (int StandardFD : StandardFDs) {      struct stat st;      errno = 0; -    while (fstat(StandardFD, &st) < 0) { +    if (RetryAfterSignal(-1, fstat, StandardFD, &st) < 0) {        assert(errno && "expected errno to be set if fstat failed!");        // fstat should return EBADF if the file descriptor is closed. -      if (errno == EBADF) -        break; -      // retry fstat if we got EINTR, otherwise bubble up the failure. -      if (errno != EINTR) +      if (errno != EBADF)          return std::error_code(errno, std::generic_category());      }      // if fstat succeeds, move on to the next FD. @@ -222,11 +219,8 @@ std::error_code Process::FixupStandardFileDescriptors() {      assert(errno == EBADF && "expected errno to have EBADF at this point!");      if (NullFD < 0) { -      while ((NullFD = open("/dev/null", O_RDWR)) < 0) { -        if (errno == EINTR) -          continue; +      if ((NullFD = RetryAfterSignal(-1, open, "/dev/null", O_RDWR)) < 0)          return std::error_code(errno, std::generic_category()); -      }      }      if (NullFD == StandardFD)  | 

