summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-06-28 08:58:21 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-06-28 08:58:21 +0000
commit1d15cf4bebc379a0f70306ae165680ffe4a12d87 (patch)
treef4f94ea85a9bdc7017c191bde12ef6b1ba954bde
parentf52f03394d9f439a6ecceca9d63804082a0f3a42 (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--ChangeLog5
-rw-r--r--include/ruby/win32.h2
-rw-r--r--io.c2
-rw-r--r--version.h6
-rw-r--r--win32/win32.c15
5 files changed, 19 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 1ab5a3f3cc..1b1e238d9d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);
diff --git a/io.c b/io.c
index c664450311..bb75ece9e4 100644
--- a/io.c
+++ b/io.c
@@ -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
diff --git a/version.h b/version.h
index c3ee2beccc..d2ca79460a 100644
--- a/version.h
+++ b/version.h
@@ -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)
{