1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-26 23:31:55 -08:00

Always start the SIGALRM atimers

* src/atimer.c (init_atimer): Always start the SIGALRM alarms,
even if we're using timerfd (bug#19776).  See long, long
discussion in the bug report for why this is necessary.
This commit is contained in:
Lars Ingebrigtsen 2021-10-27 14:58:08 +02:00
parent 14d835a298
commit 4107549a61

View file

@ -583,15 +583,16 @@ init_atimer (void)
timerfd = (egetenv ("EMACS_IGNORE_TIMERFD") || have_buggy_timerfd () ? -1 :
timerfd_create (CLOCK_REALTIME, TFD_NONBLOCK | TFD_CLOEXEC));
# endif
if (timerfd < 0)
{
struct sigevent sigev;
sigev.sigev_notify = SIGEV_SIGNAL;
sigev.sigev_signo = SIGALRM;
sigev.sigev_value.sival_ptr = &alarm_timer;
alarm_timer_ok
= timer_create (CLOCK_REALTIME, &sigev, &alarm_timer) == 0;
}
/* We're starting the alarms even if we have timerfd, because
timerfd events do not fired while Emacs Lisp is busy. This might
or might not mean that the timerfd code doesn't really give us
anything and should be removed, see discussion in bug#19776. */
struct sigevent sigev;
sigev.sigev_notify = SIGEV_SIGNAL;
sigev.sigev_signo = SIGALRM;
sigev.sigev_value.sival_ptr = &alarm_timer;
alarm_timer_ok
= timer_create (CLOCK_REALTIME, &sigev, &alarm_timer) == 0;
#endif
free_atimers = stopped_atimers = atimers = NULL;