diff options
author | mav <mav@FreeBSD.org> | 2010-10-31 11:44:41 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2010-10-31 11:44:41 +0000 |
commit | f1bdc586812e81a8dc92b036a28f8a29e0ef1914 (patch) | |
tree | f587df0e66c96db3d8415f025bfdea7d53af70ee | |
parent | da8e054ad100a876cdf64a28404bdacf3d01531d (diff) | |
download | FreeBSD-src-f1bdc586812e81a8dc92b036a28f8a29e0ef1914.zip FreeBSD-src-f1bdc586812e81a8dc92b036a28f8a29e0ef1914.tar.gz |
Fix callout_tickstofirst() behavior after signed integer ticks overflow.
This should fix callout precision drop to 1/4s after 25 days of uptime
with HZ = 1000.
Submitted by: Taku YAMAMOTO <taku@tackymt.homeip.net>
-rw-r--r-- | sys/kern/kern_timeout.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/kern/kern_timeout.c b/sys/kern/kern_timeout.c index 98f55da..f60af40 100644 --- a/sys/kern/kern_timeout.c +++ b/sys/kern/kern_timeout.c @@ -295,8 +295,7 @@ callout_tickstofirst(int limit) sc = &cc->cc_callwheel[ (curticks+skip) & callwheelmask ]; /* search scanning ticks */ TAILQ_FOREACH( c, sc, c_links.tqe ){ - if (c && (c->c_time <= curticks + ncallout) - && (c->c_time > 0)) + if (c->c_time - curticks <= ncallout) goto out; } skip++; |