diff --git a/rts/posix/ticker/TimerFd.c b/rts/posix/ticker/TimerFd.c index 0eb362426b8c7d6ed55374589385da28d834a2a8..022eccc95c5623d3a12d673729e06d13afd37dd2 100644 --- a/rts/posix/ticker/TimerFd.c +++ b/rts/posix/ticker/TimerFd.c @@ -112,7 +112,12 @@ static void *itimer_thread_func(void *_handle_tick) TSAN_ANNOTATE_BENIGN_RACE(&exited, "itimer_thread_func"); while (!RELAXED_LOAD(&exited)) { if (poll(pollfds, 2, -1) == -1) { - sysErrorBelch("Ticker: poll failed: %s", strerror(errno)); + // While the RTS attempts to mask signals, some foreign libraries + // may rely on signal delivery may unmask them. Consequently we may + // see EINTR. See #24610. + if (errno != -EINTR) { + sysErrorBelch("Ticker: poll failed: %s", strerror(errno)); + } } // We check the pipe first, even though the timerfd may also have triggered.