diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-28 08:58:21 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-28 08:58:21 +0000 |
commit | 1d15cf4bebc379a0f70306ae165680ffe4a12d87 (patch) | |
tree | f4f94ea85a9bdc7017c191bde12ef6b1ba954bde | |
parent | f52f03394d9f439a6ecceca9d63804082a0f3a42 (diff) |
merge revision(s) 32549,32557: [Backport #6661]
* win32/win32.c, include/ruby/win32.h (rb_w32_io_cancelable_p): renamed
from rb_w32_has_cancel_io(). now it takes a parameter as fd to check
the fd is console or not, because we cannot cancel console input even
if we have cancel_io function.
* io.c (WAIT_FD_IN_WIN32): call above function instead of the old one,
so now we can kill the thread which calls STDIN.gets.
the problem was reported by ko1 vir IRC.
* win32/win32.c (is_socket, is_console): add prototypes to fix compile
problem with gcc introduced at r32549.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@36244 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | include/ruby/win32.h | 2 | ||||
-rw-r--r-- | io.c | 2 | ||||
-rw-r--r-- | version.h | 6 | ||||
-rw-r--r-- | win32/win32.c | 15 |
5 files changed, 19 insertions, 11 deletions
@@ -1,3 +1,8 @@ +Thu Jun 28 17:57:49 2012 NAKAMURA Usaku <usa@ruby-lang.org> + + * win32/win32.c (is_socket, is_console): add prototypes to fix compile + problem with gcc introduced at r32549. + Wed Jun 27 08:31:50 2012 Nobuyoshi Nakada <nobu@ruby-lang.org> * insns.def (splatarray): make new array if flag is set. diff --git a/include/ruby/win32.h b/include/ruby/win32.h index b46c202ce3..2badbbcb5c 100644 --- a/include/ruby/win32.h +++ b/include/ruby/win32.h @@ -233,7 +233,7 @@ struct msghdr { 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_io_cancelable_p(int); 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); @@ -193,7 +193,7 @@ rb_update_max_fd(int fd) #if defined(_WIN32) #define WAIT_FD_IN_WIN32(fptr) \ - (rb_w32_has_cancel_io() ? 0 : rb_thread_wait_fd((fptr)->fd)) + (rb_w32_io_cancelable_p((fptr)->fd) ? 0 : rb_thread_wait_fd((fptr)->fd)) #else #define WAIT_FD_IN_WIN32(fptr) #endif @@ -1,10 +1,10 @@ #define RUBY_VERSION "1.9.3" -#define RUBY_PATCHLEVEL 242 +#define RUBY_PATCHLEVEL 243 -#define RUBY_RELEASE_DATE "2012-06-27" +#define RUBY_RELEASE_DATE "2012-06-28" #define RUBY_RELEASE_YEAR 2012 #define RUBY_RELEASE_MONTH 6 -#define RUBY_RELEASE_DAY 27 +#define RUBY_RELEASE_DAY 28 #include "ruby/version.h" diff --git a/win32/win32.c b/win32/win32.c index 79f8de6e02..253a462f23 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -578,12 +578,6 @@ init_env(void) 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) { @@ -2088,6 +2082,15 @@ set_pioinfo_extra(void) #define FDEV 0x40 /* file handle refers to device */ #define FTEXT 0x80 /* file handle is in text mode */ +static int is_socket(SOCKET); +static int is_console(SOCKET); + +int +rb_w32_io_cancelable_p(int fd) +{ + return cancel_io != NULL && (is_socket(TO_SOCKET(fd)) || !is_console(TO_SOCKET(fd))); +} + static int rb_w32_open_osfhandle(intptr_t osfhandle, int flags) { |