summaryrefslogtreecommitdiff
path: root/thread.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-06-23 11:02:44 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-06-24 13:27:02 +0900
commit358a357f727be271a1a59dfbc2ec0bf634261205 (patch)
treed72548dad9450d250d4e5bd2a89ee20fe1d76ec4 /thread.c
parent4c8c3fb2309fe4204a4d8d972a8f64b2911bca9f (diff)
Reduce repeated same code
Diffstat (limited to 'thread.c')
-rw-r--r--thread.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/thread.c b/thread.c
index ed771166e6..2d3a3e15c2 100644
--- a/thread.c
+++ b/thread.c
@@ -4242,6 +4242,9 @@ sigwait_timeout(rb_thread_t *th, int sigwait_fd, const rb_hrtime_t *orig,
return orig;
}
+#define sigwait_signals_fd(result, cond, sigwait_fd) \
+ (result > 0 && (cond) ? (result--, (sigwait_fd)) : -1)
+
static VALUE
do_select(VALUE p)
{
@@ -4277,13 +4280,10 @@ do_select(VALUE p)
}, set->sigwait_fd >= 0 ? ubf_sigwait : ubf_select, set->th, TRUE);
if (set->sigwait_fd >= 0) {
- if (result > 0 && rb_fd_isset(set->sigwait_fd, set->rset)) {
- result--;
- (void)check_signals_nogvl(set->th, set->sigwait_fd);
- }
- else {
- (void)check_signals_nogvl(set->th, -1);
- }
+ int fd = sigwait_signals_fd(result,
+ rb_fd_isset(set->sigwait_fd, set->rset),
+ set->sigwait_fd);
+ (void)check_signals_nogvl(set->th, fd);
}
RUBY_VM_CHECK_INTS_BLOCKING(set->th->ec); /* may raise */
@@ -4430,12 +4430,8 @@ rb_thread_wait_for_single_fd(int fd, int events, struct timeval *timeout)
}, ubf, wfd.th, TRUE);
if (fds[1].fd >= 0) {
- if (result > 0 && fds[1].revents) {
- result--;
- (void)check_signals_nogvl(wfd.th, fds[1].fd);
- } else {
- (void)check_signals_nogvl(wfd.th, -1);
- }
+ int fd1 = sigwait_signals_fd(result, fds[1].revents, fds[1].fd);
+ (void)check_signals_nogvl(wfd.th, fd1);
rb_sigwait_fd_put(wfd.th, fds[1].fd);
rb_sigwait_fd_migrate(wfd.th->vm);
}