kqueue: Make timer re-addition reset existing timer
authorvisa <visa@openbsd.org>
Thu, 22 Apr 2021 15:30:12 +0000 (15:30 +0000)
committervisa <visa@openbsd.org>
Thu, 22 Apr 2021 15:30:12 +0000 (15:30 +0000)
commita23d840b6d259c85de69502c20582fc7674f5e11
treed1fabd7b39d126b9727d4f2d4d29ec217665a35a
parent44f8ddd826350c80d810036f8225697d68408809
kqueue: Make timer re-addition reset existing timer

When an existing EVFILT_TIMER filter is re-added, cancel the existing
timer and any pending event, and restart the timer using the new timeout
period. This makes the new timeout period take effect immediately and
matches the behaviour of FreeBSD. Previously, the new setting was
applied only after the existing timer expired.

The timer rescheduling is done by using an f_modify callback. The
reading of timer events is moved from f_event to f_process. f_event of
timer_filtops becomes redundant. Unlike most other event sources, timers
activate knotes directly without using a klist and knote(9).

OK mpi@
lib/libc/sys/kqueue.2
sys/kern/kern_event.c