env: Add clearerr() before repeating an interrupted file read (#6609)

Summary:
This change updates PosixSequentialFile::Read to call clearerr()
before fread()ing again after an EINTR is returned on a previous
fread.

The original fix is from bd8f1ebb91.
Fixing https://github.com/facebook/rocksdb/issues/6509

Signed-off-by: phantomape <cxucheng@outlook.com>
Pull Request resolved: https://github.com/facebook/rocksdb/pull/6609

Reviewed By: zhichao-cao

Differential Revision: D20731482

Pulled By: riversand963

fbshipit-source-id: 7f1f3a1449077d5560f45c465a78d08633740ba0
main
phantomape 5 years ago committed by Facebook GitHub Bot
parent e8d332d97e
commit cb671ea1ca
  1. 1
      env/io_posix.cc

1
env/io_posix.cc vendored

@ -234,6 +234,7 @@ IOStatus PosixSequentialFile::Read(size_t n, const IOOptions& /*opts*/,
IOStatus s; IOStatus s;
size_t r = 0; size_t r = 0;
do { do {
clearerr(file_);
r = fread_unlocked(scratch, 1, n, file_); r = fread_unlocked(scratch, 1, n, file_);
} while (r == 0 && ferror(file_) && errno == EINTR); } while (r == 0 && ferror(file_) && errno == EINTR);
*result = Slice(scratch, r); *result = Slice(scratch, r);

Loading…
Cancel
Save