emacs-diffs
[Top][All Lists]
Advanced

[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;
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]