From 1b0cbb6ae07e001893d7f08933a013851b60d0e0 Mon Sep 17 00:00:00 2001 From: usa Date: Mon, 10 Nov 2014 11:21:42 +0000 Subject: * win32/win32.c (rb_w32_read): retry with reduced length if cannot to write any data but no error occurs. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48363 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ win32/win32.c | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/ChangeLog b/ChangeLog index da1a80eca7..64b6f05ed5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Nov 10 20:20:53 2014 NAKAMURA Usaku + + * win32/win32.c (rb_w32_read): retry with reduced length if cannot to + write any data but no error occurs. + Mon Nov 10 20:04:16 2014 Tanaka Akira * lib/webrick/server.rb: Setup shutdown pipe in listen method. diff --git a/win32/win32.c b/win32/win32.c index 2661641266..308f4836f9 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -6497,6 +6497,7 @@ rb_w32_write(int fd, const void *buf, size_t size) /* get rid of console writing bug */ len = (_osfile(fd) & FDEV) ? min(32 * 1024, size) : size; size -= len; + retry2: /* if have cancel_io, use Overlapped I/O */ if (cancel_io) { @@ -6556,6 +6557,12 @@ rb_w32_write(int fd, const void *buf, size_t size) goto retry; } if (ret == 0) { + size_t newlen = len / 2; + if (newlen > 0) { + size += len - newlen; + len = newlen; + goto retry2; + } ret = -1; errno = EWOULDBLOCK; } -- cgit v1.2.3