Commit 48b4ffc3 authored by Rusty Russell's avatar Rusty Russell

timer: handle time going backwards.

As seen in https://github.com/ElementsProject/lightning/issues/4401

OpenBSD 6.8 inside VirtualBox.
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 56d5c41f
...@@ -108,13 +108,10 @@ void timer_addrel(struct timers *timers, struct timer *t, struct timerel rel) ...@@ -108,13 +108,10 @@ void timer_addrel(struct timers *timers, struct timer *t, struct timerel rel)
t->time = time_to_grains(timemono_add(time_mono(), rel)); t->time = time_to_grains(timemono_add(time_mono(), rel));
#if TIME_HAVE_MONOTONIC
assert(t->time >= timers->base);
#else
/* Added in the past? Treat it as imminent. */ /* Added in the past? Treat it as imminent. */
if (t->time < timers->base) if (t->time < timers->base)
t->time = timers->base; t->time = timers->base;
#endif
if (t->time < timers->first) if (t->time < timers->first)
timers->first = t->time; timers->first = t->time;
...@@ -346,7 +343,11 @@ struct timer *timers_expire(struct timers *timers, struct timemono expire) ...@@ -346,7 +343,11 @@ struct timer *timers_expire(struct timers *timers, struct timemono expire)
unsigned int off; unsigned int off;
struct timer *t; struct timer *t;
assert(now >= timers->base); /* This can happen without TIME_HAVE_MONOTONIC, but I also have
* a report of OpenBSD 6.8 under virtualbox doing this. */
if (now < timers->base) {
return NULL;
}
if (!timers->level[0]) { if (!timers->level[0]) {
if (list_empty(&timers->far)) if (list_empty(&timers->far))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment