unix: set O_NONBLOCK in uv_pipe_open()

Don't rely on the caller to set the O_NONBLOCK flag on the file
descriptor.

Prevents sporadic stalls when the file descriptor is in blocking mode
and exactly as many bytes are read as there are available; in that case,
libuv will try to read again and block.  Node.js was guilty of this.

Fixes #941.
This commit is contained in:
Ben Noordhuis 2013-09-28 10:29:53 +02:00
parent e9df7cbcbb
commit 8fe4ca686b

View File

@ -160,6 +160,9 @@ int uv_pipe_open(uv_pipe_t* handle, uv_file fd) {
return -1;
#endif /* defined(__APPLE__) */
if (uv__nonblock(fd, 1))
return uv__set_sys_error(handle->loop, errno);
return uv__stream_open((uv_stream_t*)handle,
fd,
UV_STREAM_READABLE | UV_STREAM_WRITABLE);