mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* thread.c (rb_thread_select): fix to ignore an argument
modification of rb_thread_fd_select(). based on a patch by Eric Wong. [Bug #5306] [ruby-core:39435] * thread.c (rb_fd_rcopy): New. for reverse fd copy. * test/-ext-/old_thread_select/test_old_thread_select.rb (test_old_select_false_positive): test for bug5306. * ext/-test-/old_thread_select/old_thread_select.c (fdset2array): New. convert fdsets to array. * ext/-test-/old_thread_select/old_thread_select.c (old_thread_select): return 'read', 'write', 'except' argument of rb_thread_select() to ruby script. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4705fcc3c0
commit
2c9375ba69
4 changed files with 84 additions and 3 deletions
|
@ -25,6 +25,18 @@ static fd_set * array2fdset(fd_set *fds, VALUE ary, int *max)
|
|||
return fds;
|
||||
}
|
||||
|
||||
static void fdset2array(VALUE dst, fd_set *fds, int max)
|
||||
{
|
||||
int i;
|
||||
|
||||
rb_ary_clear(dst);
|
||||
|
||||
for (i = 0; i < max; i++) {
|
||||
if (FD_ISSET(i, fds))
|
||||
rb_ary_push(dst, INT2NUM(i));
|
||||
}
|
||||
}
|
||||
|
||||
static VALUE
|
||||
old_thread_select(VALUE klass, VALUE r, VALUE w, VALUE e, VALUE timeout)
|
||||
{
|
||||
|
@ -45,6 +57,13 @@ old_thread_select(VALUE klass, VALUE r, VALUE w, VALUE e, VALUE timeout)
|
|||
rc = rb_thread_select(max, rp, wp, ep, tvp);
|
||||
if (rc == -1)
|
||||
rb_sys_fail("rb_wait_for_single_fd");
|
||||
|
||||
if (rp)
|
||||
fdset2array(r, &rfds, max);
|
||||
if (wp)
|
||||
fdset2array(w, &wfds, max);
|
||||
if (ep)
|
||||
fdset2array(e, &efds, max);
|
||||
return INT2NUM(rc);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue