svn commit: r248092 - head/sys/kern
Alexander Motin
mav at FreeBSD.org
Sat Mar 9 09:07:14 UTC 2013
Author: mav
Date: Sat Mar 9 09:07:13 2013
New Revision: 248092
URL: http://svnweb.freebsd.org/changeset/base/248092
Log:
Rework overflow checks of r247898 to not let too "intelligent" compiler to
optimize it out.
Submitted by: bde
Modified:
head/sys/kern/kern_event.c
head/sys/kern/sys_generic.c
Modified: head/sys/kern/kern_event.c
==============================================================================
--- head/sys/kern/kern_event.c Sat Mar 9 08:50:17 2013 (r248091)
+++ head/sys/kern/kern_event.c Sat Mar 9 09:07:13 2013 (r248092)
@@ -1329,12 +1329,13 @@ kqueue_scan(struct kqueue *kq, int maxev
goto done_nl;
}
if (timespecisset(tsp)) {
- if (tsp->tv_sec < INT32_MAX) {
+ if (tsp->tv_sec <= INT32_MAX) {
rsbt = tstosbt(*tsp);
if (TIMESEL(&asbt, rsbt))
asbt += tc_tick_sbt;
- asbt += rsbt;
- if (asbt < rsbt)
+ if (asbt <= INT64_MAX - rsbt)
+ asbt += rsbt;
+ else
asbt = 0;
rsbt >>= tc_precexp;
} else
Modified: head/sys/kern/sys_generic.c
==============================================================================
--- head/sys/kern/sys_generic.c Sat Mar 9 08:50:17 2013 (r248091)
+++ head/sys/kern/sys_generic.c Sat Mar 9 09:07:13 2013 (r248092)
@@ -1051,16 +1051,17 @@ kern_select(struct thread *td, int nd, f
error = EINVAL;
goto done;
}
- if (rtv.tv_sec == 0 && rtv.tv_usec == 0)
+ if (!timevalisset(&rtv))
asbt = 0;
- else if (rtv.tv_sec < INT32_MAX) {
+ else if (rtv.tv_sec <= INT32_MAX) {
rsbt = tvtosbt(rtv);
precision = rsbt;
precision >>= tc_precexp;
if (TIMESEL(&asbt, rsbt))
asbt += tc_tick_sbt;
- asbt += rsbt;
- if (asbt < rsbt)
+ if (asbt <= INT64_MAX - rsbt)
+ asbt += rsbt;
+ else
asbt = -1;
} else
asbt = -1;
More information about the svn-src-head
mailing list