Bläddra i källkod

Call select() before reading from the child.

In readFromChild() for non-Windows: Call select() to check
for available data.  Reason: To ensure that ::read() doesn't
hang if the child exits during the call to ::read().
adeniz_1
Alban Deniz 10 månader sedan
förälder
incheckning
a1cd1bb00d
1 ändrade filer med 23 tillägg och 0 borttagningar
  1. 23
    0
      child.cpp

+ 23
- 0
child.cpp Visa fil

@@ -1525,6 +1525,29 @@ namespace CodeDweller {
}
#else
fd_set readFd;
int retVal;
struct timeval timeout = {0, 0};
FD_ZERO(&readFd);
FD_SET(inputFileDescriptor, &readFd);
// Check if input is available.
retVal = select(inputFileDescriptor + 1, &readFd, NULL, NULL, &timeout);
if (-1 == retVal) {
throw std::runtime_error("Error from select() when reading from the "
"child process: " + getErrorText());
}
// Is data available?
if (0 == retVal) {
// No. Wait and try again.
pollTimer.pause();
continue;
}
ssize_t nBytesRead;
nBytesRead = ::read(inputFileDescriptor,

Laddar…
Avbryt
Spara