emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 364cf24: Prefer POSIX timers to timerfd timers


From: Ken Brown
Subject: master 364cf24: Prefer POSIX timers to timerfd timers
Date: Sun, 14 Nov 2021 14:10:33 -0500 (EST)

branch: master
commit 364cf2494c9b94e1d265b637394c80c4eecfb505
Author: Ken Brown <kbrown@cornell.edu>
Commit: Ken Brown <kbrown@cornell.edu>

    Prefer POSIX timers to timerfd timers
    
    * src/atimer.c (set_alarm): Try to start a POSIX timer before
    starting a timerfd timer.  On Cygwin, return if the POSIX timer is
    started successfully. (Bug#51734)
---
 src/atimer.c | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/src/atimer.c b/src/atimer.c
index 9bde9c2..df35603 100644
--- a/src/atimer.c
+++ b/src/atimer.c
@@ -309,24 +309,29 @@ set_alarm (void)
          struct itimerspec ispec;
          ispec.it_value = atimers->expiration;
          ispec.it_interval.tv_sec = ispec.it_interval.tv_nsec = 0;
+         if (alarm_timer_ok
+             && timer_settime (alarm_timer, TIMER_ABSTIME, &ispec, 0) == 0)
+           exit = true;
+
+         /* Don't start both timerfd and POSIX timers on Cygwin; this
+            causes a slowdown (bug#51734).  Prefer POSIX timers
+            because the timerfd notifications aren't delivered while
+            Emacs is busy, which prevents things like the hourglass
+            pointer from being displayed reliably (bug#19776). */
+# ifdef CYGWIN
+         if (exit)
+           return;
+# endif
+
 # ifdef HAVE_TIMERFD
-         if (timerfd_settime (timerfd, TFD_TIMER_ABSTIME, &ispec, 0) == 0)
+         if (0 <= timerfd
+             && timerfd_settime (timerfd, TFD_TIMER_ABSTIME, &ispec, 0) == 0)
            {
              add_timer_wait_descriptor (timerfd);
              exit = true;
            }
 # endif
 
-# ifdef CYGWIN
-         /* Don't start both timerfd and alarms on Cygwin; this
-            causes a slowdown (bug#51734). */
-         if (exit)
-           return;
-# endif
-         if (alarm_timer_ok
-             && timer_settime (alarm_timer, TIMER_ABSTIME, &ispec, 0) == 0)
-           exit = true;
-
          if (exit)
            return;
        }



reply via email to

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