diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-11-14 03:52:28 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-11-14 03:52:28 +0000 |
commit | cc07dc7cf22f08e4a412c545330f393540c67863 (patch) | |
tree | 755cb4cccc084a430023f64c3f6092ebf525483c /thread.c | |
parent | cb592b3713f706ae7c588d1aef55ff4e01a7cbc2 (diff) |
thread.c (rb_thread_fd_select): favor rb_thread_* when no FDs
select() is a crap API for even sleeping on sigwait_fd, so favor
the native_sleep-based functions when there are no FDs, instead.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65718 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'thread.c')
-rw-r--r-- | thread.c | 20 |
1 files changed, 10 insertions, 10 deletions
@@ -4004,21 +4004,11 @@ rb_thread_fd_select(int max, rb_fdset_t * read, rb_fdset_t * write, rb_fdset_t * set.th = GET_THREAD(); RUBY_VM_CHECK_INTS_BLOCKING(set.th->ec); set.max = max; - set.sigwait_fd = rb_sigwait_fd_get(set.th); set.rset = read; set.wset = write; set.eset = except; set.timeout = timeout; - if (set.sigwait_fd >= 0) { - if (set.rset) - rb_fd_set(set.sigwait_fd, set.rset); - else - set.rset = init_set_fd(set.sigwait_fd, &set.orig_rset); - if (set.sigwait_fd >= set.max) { - set.max = set.sigwait_fd + 1; - } - } if (!set.rset && !set.wset && !set.eset) { if (!timeout) { rb_thread_sleep_forever(); @@ -4028,6 +4018,16 @@ rb_thread_fd_select(int max, rb_fdset_t * read, rb_fdset_t * write, rb_fdset_t * return 0; } + set.sigwait_fd = rb_sigwait_fd_get(set.th); + if (set.sigwait_fd >= 0) { + if (set.rset) + rb_fd_set(set.sigwait_fd, set.rset); + else + set.rset = init_set_fd(set.sigwait_fd, &set.orig_rset); + if (set.sigwait_fd >= set.max) { + set.max = set.sigwait_fd + 1; + } + } #define fd_init_copy(f) do { \ if (set.f) { \ rb_fd_resize(set.max - 1, set.f); \ |