[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 4107549 2/2: Always start the SIGALRM atimers
From: |
Lars Ingebrigtsen |
Subject: |
master 4107549 2/2: Always start the SIGALRM atimers |
Date: |
Wed, 27 Oct 2021 08:59:36 -0400 (EDT) |
branch: master
commit 4107549a614a9977cdec4cb7a1d5eaec72a3380f
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>
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.
---
src/atimer.c | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/src/atimer.c b/src/atimer.c
index 9b19867..802f3c6 100644
--- a/src/atimer.c
+++ b/src/atimer.c
@@ -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;