Oh, event_err typically uses __func__ so I would do that here too.
On Tue, Apr 30, 2019 at 06:48:13PM +0100, Nicholas Marriott wrote: > ok for both > > > On Tue, Apr 30, 2019 at 07:13:55PM +0200, Jeremie Courreges-Anglas wrote: > > On Tue, Apr 30 2019, Jeremie Courreges-Anglas <j...@wxcvbn.org> wrote: > > > libevent contains a fallback path in case clock_gettime(CLOCK_MONOTONIC) > > > fails. The fallback path tries to cope with time going backwards and > > > reaches into the timeheap internals, as noticed by Tobias in > > > > > > https://marc.info/?l=openbsd-tech&m=155595247719664&w=2 > > > > > > I doubt that we care about this kind of seldom-tested compat code, which > > > was probably useful to get portable libevent to run on various > > > (ancient?) systems. > > > > > > Our clock_gettime can only fail for two reasons: > > > - invalid clock id. Lots of our userland uses CLOCK_MONOTONIC now, > > > I think it can be considered a requirement. > > > - invalid timespec pointer. Here, since we pass the address of > > > a timespec structure on the stack something must be really wrong if we > > > get EFAULT. > > > > > > So the diff below removes the fallback path and all associated code and > > > variables. > > > > > I have left out some minor cleanups for now to ease reviews. > > > > Here's a diff that amends the signature of gettime() and makes use of > > TIMESPEC_TO_TIMEVAL(). > > > > > > Index: event.c > > =================================================================== > > --- event.c.orig > > +++ event.c > > @@ -77,23 +77,20 @@ static void event_process_active(struct > > static int timeout_next(struct event_base *, struct timeval **); > > static void timeout_process(struct event_base *); > > > > -static int > > +static void > > gettime(struct event_base *base, struct timeval *tp) > > { > > struct timespec ts; > > > > if (base->tv_cache.tv_sec) { > > *tp = base->tv_cache; > > - return (0); > > + return; > > } > > > > if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1) > > event_err(1, "libevent: clock_gettime failed"); > > > > - tp->tv_sec = ts.tv_sec; > > - tp->tv_usec = ts.tv_nsec / 1000; > > - > > - return (0); > > + TIMESPEC_TO_TIMEVAL(tp, &ts); > > } > > > > struct event_base * > > @@ -803,8 +800,7 @@ timeout_next(struct event_base *base, st > > return (0); > > } > > > > - if (gettime(base, &now) == -1) > > - return (-1); > > + gettime(base, &now); > > > > if (timercmp(&ev->ev_timeout, &now, <=)) { > > timerclear(tv); > > > > > > -- > > jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE > >