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
> 

Reply via email to