summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2024-05-29 10:57:42 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2024-05-29 10:57:43 -0700
commit22c1e5f126db8e057bdb48d91aa5ae449e019226 (patch)
treec1f46b8c21baf4b9605da67c46608904f84b109b
parente5a1119f1b4fd93d60540cd4277e61851c3ebe45 (diff)
Suppress -Wclobbered warnings
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
-rw-r--r--thread.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/thread.c b/thread.c
index 74f0d13109..79bad7ed98 100644
--- a/thread.c
+++ b/thread.c
@@ -4172,7 +4172,7 @@ rb_fd_set(int fd, rb_fdset_t *set)
#endif
static int
-wait_retryable(int *result, int errnum, rb_hrtime_t *rel, rb_hrtime_t end)
+wait_retryable(volatile int *result, int errnum, rb_hrtime_t *rel, rb_hrtime_t end)
{
if (*result < 0) {
switch (errnum) {
@@ -4226,11 +4226,12 @@ static VALUE
do_select(VALUE p)
{
struct select_set *set = (struct select_set *)p;
- int result = 0;
+ volatile int result = 0;
int lerrno;
rb_hrtime_t *to, rel, end = 0;
timeout_prepare(&to, &rel, &end, set->timeout);
+ volatile rb_hrtime_t endtime = end;
#define restore_fdset(dst, src) \
((dst) ? rb_fd_dup(dst, src) : (void)0)
#define do_select_update() \
@@ -4254,7 +4255,7 @@ do_select(VALUE p)
}, ubf_select, set->th, TRUE);
RUBY_VM_CHECK_INTS_BLOCKING(set->th->ec); /* may raise */
- } while (wait_retryable(&result, lerrno, to, end) && do_select_update());
+ } while (wait_retryable(&result, lerrno, to, endtime) && do_select_update());
if (result < 0) {
errno = lerrno;
@@ -4323,7 +4324,7 @@ int
rb_thread_wait_for_single_fd(int fd, int events, struct timeval *timeout)
{
struct pollfd fds[1];
- int result = 0;
+ volatile int result = 0;
nfds_t nfds;
struct waiting_fd wfd;
int state;
@@ -4343,6 +4344,7 @@ rb_thread_wait_for_single_fd(int fd, int events, struct timeval *timeout)
rb_hrtime_t *to, rel, end = 0;
RUBY_VM_CHECK_INTS_BLOCKING(wfd.th->ec);
timeout_prepare(&to, &rel, &end, timeout);
+ volatile rb_hrtime_t endtime = end;
fds[0].fd = fd;
fds[0].events = (short)events;
fds[0].revents = 0;
@@ -4360,7 +4362,7 @@ rb_thread_wait_for_single_fd(int fd, int events, struct timeval *timeout)
}, ubf_select, wfd.th, TRUE);
RUBY_VM_CHECK_INTS_BLOCKING(wfd.th->ec);
- } while (wait_retryable(&result, lerrno, to, end));
+ } while (wait_retryable(&result, lerrno, to, endtime));
}
EC_POP_TAG();