• Dmitry Antipov's avatar
    On GNU/Linux, use timerfd for asynchronous timers. · 768b24eb
    Dmitry Antipov authored
    * 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.
    768b24eb
process.c 213 KB