Usage of O_NONBLOCK in bjam is now confirmed as a bug and fixed upstream.

Update the comment.

llvm-svn: 104021
This commit is contained in:
Dan Gohman 2010-05-18 15:25:14 +00:00
parent ab7be75e3f
commit dea5310433
1 changed files with 7 additions and 4 deletions

View File

@ -434,10 +434,13 @@ void raw_fd_ostream::write_impl(const char *Ptr, size_t Size) {
if (ret < 0) {
// If it's a recoverable error, swallow it and retry the write.
// EAGAIN and EWOULDBLOCK are not unambiguously recoverable, but
// some programs, such as bjam, assume that their child processes
// will treat them as if they are. If you don't want this code to
// spin, don't use O_NONBLOCK file descriptors with raw_ostream.
//
// Ideally we wouldn't ever see EAGAIN or EWOULDBLOCK here, since
// raw_ostream isn't designed to do non-blocking I/O. However, some
// programs, such as old versions of bjam, have mistakenly used
// O_NONBLOCK. For compatibility, emulate blocking semantics by
// spinning until the write succeeds. If you don't want spinning,
// don't use O_NONBLOCK file descriptors with raw_ostream.
if (errno == EINTR || errno == EAGAIN
#ifdef EWOULDBLOCK
|| errno == EWOULDBLOCK