aboutsummaryrefslogtreecommitdiffstats
path: root/src/process.c
diff options
context:
space:
mode:
authorDmitry Antipov2014-07-28 10:28:15 +0400
committerDmitry Antipov2014-07-28 10:28:15 +0400
commit768b24eb0e880c0b39e36fd089905cdca572a758 (patch)
tree75899b103fedc549e5d17294d39bfcb4ed0a9bc9 /src/process.c
parent7daa4ff121ad8da6e609b959d5c95796e5d3a9eb (diff)
downloademacs-768b24eb0e880c0b39e36fd089905cdca572a758.tar.gz
emacs-768b24eb0e880c0b39e36fd089905cdca572a758.zip
On GNU/Linux, use timerfd for asynchronous timers.
* configure.ac (toplevel): Check whether GNU/Linux-specific timerfd functions and macros are available. * m4/clock_time.m4 (gl_CLOCK_TIME): Check for clock_getres as well. * src/atimer.c (toplevel) [HAVE_TIMERFD]: Include sys/timerfd.h. (toplevel): Rename alarm_timer_ok to special_timer_available. [HAVE_TIMERFD]: Declare timerfd. [HAVE_CLOCK_GETRES]: Declare resolution. (start_atimer) [HAVE_CLOCK_GETRES]: Round up timestamp to system timer resolution. (set_alarm) [HAVE_TIMERFD]: Use timerfd_settime. (timerfd_callback) [HAVE_TIMERFD]: New function. (atimer_result, debug_timer_callback, Fdebug_timer_check) [ENABLE_CHECKING]: New function for the sake of automated tests. (init_atimer) [HAVE_TIMERFD]: Setup timerfd. [HAVE_CLOCK_GETRES]: Likewise for system timer resolution. [ENABLE_CHECKING]: Defsubr test function. * src/atimer.h (timerfd_callback) [HAVE_TIMERFD]: Add prototype. * src/lisp.h (add_timer_wait_descriptor) [HAVE_TIMERFD]: Likewise. * src/process.c (add_timer_wait_descriptor) [HAVE_TIMERFD]: New function. * test/automated/timer-tests.el (timer-tests-debug-timer-check): New test.
Diffstat (limited to 'src/process.c')
-rw-r--r--src/process.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/process.c b/src/process.c
index 4449493a2b6..cfc1e189cab 100644
--- a/src/process.c
+++ b/src/process.c
@@ -6827,6 +6827,24 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
6827/* The following functions are needed even if async subprocesses are 6827/* The following functions are needed even if async subprocesses are
6828 not supported. Some of them are no-op stubs in that case. */ 6828 not supported. Some of them are no-op stubs in that case. */
6829 6829
6830#ifdef HAVE_TIMERFD
6831
6832/* Add FD, which is a descriptor returned by timerfd_create,
6833 to the set of non-keyboard input descriptors. */
6834
6835void
6836add_timer_wait_descriptor (int fd)
6837{
6838 FD_SET (fd, &non_keyboard_wait_mask);
6839 fd_callback_info[fd].func = timerfd_callback;
6840 fd_callback_info[fd].data = NULL;
6841 fd_callback_info[fd].condition |= FOR_READ;
6842 if (fd > max_input_desc)
6843 max_input_desc = fd;
6844}
6845
6846#endif /* HAVE_TIMERFD */
6847
6830/* Add DESC to the set of keyboard input descriptors. */ 6848/* Add DESC to the set of keyboard input descriptors. */
6831 6849
6832void 6850void