From 041116d94c4357564a362b4c2250abc3e869ba64 Mon Sep 17 00:00:00 2001 From: usa Date: Thu, 28 Aug 2008 19:49:20 +0000 Subject: * win32/win32.c (rb_w32_read, rb_w32_write): more accurate handling of wait result. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18915 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ win32/win32.c | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index b63d98ec5..2e268b8d8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Aug 29 04:47:49 2008 NAKAMURA Usaku + + * win32/win32.c (rb_w32_read, rb_w32_write): more accurate handling + of wait result. + Fri Aug 29 02:59:35 2008 Tanaka Akira * transcode.c (econv_finish): new method. diff --git a/win32/win32.c b/win32/win32.c index 7d5fbda63..ece432f0b 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -4367,7 +4367,9 @@ rb_w32_read(int fd, void *buf, size_t size) if (pol) { wait = rb_w32_wait_events_blocking(&ol.hEvent, 1, INFINITE); if (wait != WAIT_OBJECT_0) { - if (errno != EINTR) + if (wait == WAIT_OBJECT_0 + 1) + errno = EINTR; + else errno = map_errno(GetLastError()); CloseHandle(ol.hEvent); cancel_io((HANDLE)_osfhnd(fd)); @@ -4471,7 +4473,9 @@ rb_w32_write(int fd, const void *buf, size_t size) if (pol) { wait = rb_w32_wait_events_blocking(&ol.hEvent, 1, INFINITE); if (wait != WAIT_OBJECT_0) { - if (errno != EINTR) + if (wait == WAIT_OBJECT_0 + 1) + errno = EINTR; + else errno = map_errno(GetLastError()); CloseHandle(ol.hEvent); cancel_io((HANDLE)_osfhnd(fd)); -- cgit