ruby-changes:15788
From: usa <ko1@a...>
Date: Mon, 10 May 2010 14:02:54 +0900 (JST)
Subject: [ruby-changes:15788] Ruby:r27718 (trunk): * win32/win32.c, include/ruby/win32.h (rb_w32_has_cancel_io): new
usa 2010-05-10 14:02:44 +0900 (Mon, 10 May 2010) New Revision: 27718 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27718 Log: * win32/win32.c, include/ruby/win32.h (rb_w32_has_cancel_io): new function. * io.c (WAIT_FD_IN_WIN32): check only when it's not cancelable. Modified files: trunk/include/ruby/win32.h trunk/io.c trunk/win32/win32.c Index: include/ruby/win32.h =================================================================== --- include/ruby/win32.h (revision 27717) +++ include/ruby/win32.h (revision 27718) @@ -222,6 +222,7 @@ extern int rb_w32_cmdvector(const char *, char ***); extern rb_pid_t rb_w32_pipe_exec(const char *, const char *, int, int *, int *); extern int flock(int fd, int oper); +extern int rb_w32_has_cancel_io(void); extern int rb_w32_is_socket(int); extern int WSAAPI rb_w32_accept(int, struct sockaddr *, int *); extern int WSAAPI rb_w32_bind(int, const struct sockaddr *, int); Index: io.c =================================================================== --- io.c (revision 27717) +++ io.c (revision 27718) @@ -189,9 +189,10 @@ #define READ_CHAR_PENDING(fptr) ((fptr)->cbuf_len) #if defined(_WIN32) -#define WAIT_FD_IN_WIN32(fptr) rb_thread_wait_fd((fptr)->fd); +#define WAIT_FD_IN_WIN32(fptr) \ + (rb_w32_has_cancel_io() ? 0 : rb_thread_wait_fd((fptr)->fd)) #else -#define WAIT_FD_IN_WIN32(fptr) ; +#define WAIT_FD_IN_WIN32(fptr) #endif #define READ_CHECK(fptr) do {\ Index: win32/win32.c =================================================================== --- win32/win32.c (revision 27717) +++ win32/win32.c (revision 27718) @@ -559,6 +559,12 @@ typedef BOOL (WINAPI *cancel_io_t)(HANDLE); static cancel_io_t cancel_io = NULL; +int +rb_w32_has_cancel_io(void) +{ + return cancel_io != NULL; +} + static void init_func(void) { -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/