From 3b88dc6f19feda070ae1b9955dad7acfc6ed0142 Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Fri, 28 Feb 2014 12:14:05 +0400 Subject: stream_wrap: don't write twice on uv_try_write err fix #7155 --- src/stream_wrap.cc | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'src/stream_wrap.cc') 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& 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& 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; } -- cgit v1.2.1