[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;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 364cf24: Prefer POSIX timers to timerfd timers,
Ken Brown <=