[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]