diff options
Diffstat (limited to 'src/stream_wrap.cc')
-rw-r--r-- | src/stream_wrap.cc | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/stream_wrap.cc b/src/stream_wrap.cc index 3a2d110efa..62193fd796 100644 --- a/src/stream_wrap.cc +++ b/src/stream_wrap.cc @@ -215,7 +215,9 @@ void StreamWrap::WriteBuffer(const FunctionCallbackInfo<Value>& args) { uv_buf_t* bufs = &buf; size_t count = 1; int err = wrap->callbacks()->TryWrite(&bufs, &count); - if (err == 0) + if (err != 0) + goto done; + if (count == 0) goto done; assert(count == 1); @@ -296,11 +298,15 @@ void StreamWrap::WriteStringImpl(const FunctionCallbackInfo<Value>& args) { size_t count = 1; err = wrap->callbacks()->TryWrite(&bufs, &count); + // Failure + if (err != 0) + goto done; + // Success - if (err == 0) + if (count == 0) goto done; - // Failure, or partial write + // Partial write assert(count == 1); } @@ -603,6 +609,8 @@ int StreamWrapCallbacks::TryWrite(uv_buf_t** bufs, size_t* count) { size_t vcount = *count; err = uv_try_write(wrap()->stream(), vbufs, vcount); + if (err == UV_ENOSYS) + return 0; if (err < 0) return err; @@ -626,10 +634,7 @@ int StreamWrapCallbacks::TryWrite(uv_buf_t** bufs, size_t* count) { *bufs = vbufs; *count = vcount; - if (vcount == 0) - return 0; - else - return -1; + return 0; } |