summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-08-30 20:27:21 +0000
committerkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-08-30 20:27:21 +0000
commitb1ab5d1b424de2c493706e56ed192ee5b95d59ea (patch)
tree2d9c00fbff9bf61e9320e797f52fc46fde4a4f04
parentee56dd160e410e2a44ae7d861b8520810f957416 (diff)
merge revision(s) 33128:
* win32/win32.c, include/ruby/intern.h (rb_w32_fd_copy): implement for rb_thread_select() in thread.c. the use of rb_fd_copy() is introduced in r33117. [Bug #5229] [ruby-core:39102] * thread.c (rb_thread_select): must call rb_fd_init() before using rb_fdset_t. see the implementations of rb_fd_init()s if you want to know the reason. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@33134 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog11
-rw-r--r--include/ruby/intern.h2
-rw-r--r--thread.c5
-rw-r--r--version.h4
-rw-r--r--win32/win32.c16
5 files changed, 35 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 784e6404f3..0ca50800a7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Wed Aug 31 05:26:30 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c, include/ruby/intern.h (rb_w32_fd_copy): implement
+ for rb_thread_select() in thread.c. the use of rb_fd_copy() is
+ introduced in r33117.
+ [Bug #5229] [ruby-core:39102]
+
+ * thread.c (rb_thread_select): must call rb_fd_init() before using
+ rb_fdset_t. see the implementations of rb_fd_init()s if you want to
+ know the reason.
+
Tue Aug 30 11:25:21 2011 NARUSE, Yui <naruse@ruby-lang.org>
* ext/json: Merge json gem 1.5.4+ (2149f4185c598fb97db1).
diff --git a/include/ruby/intern.h b/include/ruby/intern.h
index 3ad0212ccb..dae61a7812 100644
--- a/include/ruby/intern.h
+++ b/include/ruby/intern.h
@@ -270,6 +270,8 @@ void rb_fd_term(rb_fdset_t *);
void rb_fd_set(int, rb_fdset_t *);
#define rb_fd_clr(n, f) rb_w32_fdclr((n), (f)->fdset)
#define rb_fd_isset(n, f) rb_w32_fdisset((n), (f)->fdset)
+#define rb_fd_copy(d, s, n) rb_w32_fd_copy((d), (s), (n))
+void rb_w32_fd_copy(rb_fdset_t *, const fd_set *, int);
#define rb_fd_dup(d, s) rb_w32_fd_dup((d), (s))
void rb_w32_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src);
#define rb_fd_select(n, rfds, wfds, efds, timeout) rb_w32_select((n), (rfds) ? ((rb_fdset_t*)(rfds))->fdset : NULL, (wfds) ? ((rb_fdset_t*)(wfds))->fdset : NULL, (efds) ? ((rb_fdset_t*)(efds))->fdset: NULL, (timeout))
diff --git a/thread.c b/thread.c
index f14cba7d12..9e70a1e386 100644
--- a/thread.c
+++ b/thread.c
@@ -2682,7 +2682,7 @@ int
rb_thread_select(int max, fd_set * read, fd_set * write, fd_set * except,
struct timeval *timeout)
{
- rb_fdset_t fdsets[3] = { 0 };
+ rb_fdset_t fdsets[3];
rb_fdset_t *rfds = NULL;
rb_fdset_t *wfds = NULL;
rb_fdset_t *efds = NULL;
@@ -2690,14 +2690,17 @@ rb_thread_select(int max, fd_set * read, fd_set * write, fd_set * except,
if (read) {
rfds = &fdsets[0];
+ rb_fd_init(rfds);
rb_fd_copy(rfds, read, max);
}
if (write) {
wfds = &fdsets[1];
+ rb_fd_init(wfds);
rb_fd_copy(wfds, write, max);
}
if (except) {
efds = &fdsets[2];
+ rb_fd_init(wfds);
rb_fd_copy(efds, except, max);
}
diff --git a/version.h b/version.h
index 23c6cecd47..89f524a223 100644
--- a/version.h
+++ b/version.h
@@ -1,10 +1,10 @@
#define RUBY_VERSION "1.9.3"
#define RUBY_PATCHLEVEL -1
-#define RUBY_RELEASE_DATE "2011-08-30"
+#define RUBY_RELEASE_DATE "2011-08-31"
#define RUBY_RELEASE_YEAR 2011
#define RUBY_RELEASE_MONTH 8
-#define RUBY_RELEASE_DAY 30
+#define RUBY_RELEASE_DAY 31
#include "ruby/version.h"
diff --git a/win32/win32.c b/win32/win32.c
index 4d3080663b..5e4ea6db4e 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -2368,6 +2368,21 @@ rb_w32_fdisset(int fd, fd_set *set)
}
void
+rb_w32_fd_copy(rb_fdset_t *dst, const fd_set *src, int max)
+{
+ max = min(src->fd_count, max);
+ if ((UINT)dst->capa < max) {
+ dst->capa = (src->fd_count / FD_SETSIZE + 1) * FD_SETSIZE;
+ dst->fdset = xrealloc(dst->fdset, sizeof(unsigned int) + sizeof(SOCKET) * dst->capa);
+ }
+
+ memcpy(dst->fdset->fd_array, src->fd_array,
+ max * sizeof(src->fd_array[0]));
+ dst->fdset->fd_count = src->fd_count;
+}
+
+/* License: Ruby's */
+void
rb_w32_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src)
{
if ((UINT)dst->capa < src->fdset->fd_count) {
@@ -2377,6 +2392,7 @@ rb_w32_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src)
memcpy(dst->fdset->fd_array, src->fdset->fd_array,
src->fdset->fd_count * sizeof(src->fdset->fd_array[0]));
+ dst->fdset->fd_count = src->fdset->fd_count;
}
//