CTest: Fix process output read error cases

The libuv documentation states that the stream read callback may
be called with `nread == 0` for EAGAIN.  Handle this gracefully.
It also states that the callee is responsible for closing the
stream on error.  Always close the stream for `nread < 0`.
This commit is contained in:
Brad King
2018-01-17 11:20:24 -05:00
parent c10119df62
commit a6e9b9c9e4
+5
View File
@@ -244,6 +244,10 @@ void cmProcess::OnRead(ssize_t nread, const uv_buf_t* buf)
return;
}
if (nread == 0) {
return;
}
// The process will provide no more data.
if (nread != UV_EOF) {
auto error = static_cast<int>(nread);
@@ -257,6 +261,7 @@ void cmProcess::OnRead(ssize_t nread, const uv_buf_t* buf)
}
this->ReadHandleClosed = true;
this->PipeReader.reset();
if (this->ProcessHandleClosed) {
uv_timer_stop(this->Timer);
this->Runner.FinalizeTest();