mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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/trunk@33128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
527be1b25a
commit
ee7d523631
4 changed files with 33 additions and 1 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
Tue Aug 30 23:59:36 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 22:34:45 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
|
Tue Aug 30 22:34:45 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
|
||||||
|
|
||||||
* test/dl/test_callback.rb (test_callback_with_string): prevents
|
* test/dl/test_callback.rb (test_callback_with_string): prevents
|
||||||
|
|
|
@ -286,6 +286,8 @@ void rb_fd_term(rb_fdset_t *);
|
||||||
void rb_fd_set(int, 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_clr(n, f) rb_w32_fdclr((n), (f)->fdset)
|
||||||
#define rb_fd_isset(n, f) rb_w32_fdisset((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))
|
#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);
|
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))
|
#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))
|
||||||
|
|
5
thread.c
5
thread.c
|
@ -2686,7 +2686,7 @@ int
|
||||||
rb_thread_select(int max, fd_set * read, fd_set * write, fd_set * except,
|
rb_thread_select(int max, fd_set * read, fd_set * write, fd_set * except,
|
||||||
struct timeval *timeout)
|
struct timeval *timeout)
|
||||||
{
|
{
|
||||||
rb_fdset_t fdsets[3] = { 0 };
|
rb_fdset_t fdsets[3];
|
||||||
rb_fdset_t *rfds = NULL;
|
rb_fdset_t *rfds = NULL;
|
||||||
rb_fdset_t *wfds = NULL;
|
rb_fdset_t *wfds = NULL;
|
||||||
rb_fdset_t *efds = NULL;
|
rb_fdset_t *efds = NULL;
|
||||||
|
@ -2694,14 +2694,17 @@ rb_thread_select(int max, fd_set * read, fd_set * write, fd_set * except,
|
||||||
|
|
||||||
if (read) {
|
if (read) {
|
||||||
rfds = &fdsets[0];
|
rfds = &fdsets[0];
|
||||||
|
rb_fd_init(rfds);
|
||||||
rb_fd_copy(rfds, read, max);
|
rb_fd_copy(rfds, read, max);
|
||||||
}
|
}
|
||||||
if (write) {
|
if (write) {
|
||||||
wfds = &fdsets[1];
|
wfds = &fdsets[1];
|
||||||
|
rb_fd_init(wfds);
|
||||||
rb_fd_copy(wfds, write, max);
|
rb_fd_copy(wfds, write, max);
|
||||||
}
|
}
|
||||||
if (except) {
|
if (except) {
|
||||||
efds = &fdsets[2];
|
efds = &fdsets[2];
|
||||||
|
rb_fd_init(wfds);
|
||||||
rb_fd_copy(efds, except, max);
|
rb_fd_copy(efds, except, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2466,6 +2466,21 @@ rb_w32_fdisset(int fd, fd_set *set)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* License: Ruby's */
|
||||||
|
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 */
|
/* License: Ruby's */
|
||||||
void
|
void
|
||||||
rb_w32_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src)
|
rb_w32_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src)
|
||||||
|
@ -2477,6 +2492,7 @@ rb_w32_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src)
|
||||||
|
|
||||||
memcpy(dst->fdset->fd_array, src->fdset->fd_array,
|
memcpy(dst->fdset->fd_array, src->fdset->fd_array,
|
||||||
src->fdset->fd_count * sizeof(src->fdset->fd_array[0]));
|
src->fdset->fd_count * sizeof(src->fdset->fd_array[0]));
|
||||||
|
dst->fdset->fd_count = src->fdset->fd_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in a new issue