Page MenuHomeFreeBSD

D50075.id154486.diff
No OneTemporary

D50075.id154486.diff

diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c
--- a/sys/kern/kern_time.c
+++ b/sys/kern/kern_time.c
@@ -504,24 +504,27 @@
sbintime_t sbt, sbtt, prec, tmp;
time_t over;
int error;
- bool is_abs_real;
+ bool is_abs_real, precise;
if (rqt->tv_nsec < 0 || rqt->tv_nsec >= NS_PER_SEC)
return (EINVAL);
if ((flags & ~TIMER_ABSTIME) != 0)
return (EINVAL);
+ precise = false;
switch (clock_id) {
case CLOCK_REALTIME:
case CLOCK_REALTIME_PRECISE:
+ precise = true;
case CLOCK_REALTIME_FAST:
case CLOCK_SECOND:
is_abs_real = (flags & TIMER_ABSTIME) != 0;
break;
case CLOCK_MONOTONIC:
- case CLOCK_MONOTONIC_PRECISE:
- case CLOCK_MONOTONIC_FAST:
case CLOCK_UPTIME:
+ case CLOCK_MONOTONIC_PRECISE:
case CLOCK_UPTIME_PRECISE:
+ precise = true;
+ case CLOCK_MONOTONIC_FAST:
case CLOCK_UPTIME_FAST:
is_abs_real = false;
break;
@@ -553,10 +556,13 @@
} else
over = 0;
tmp = tstosbt(ts);
- prec = tmp;
- prec >>= tc_precexp;
- if (TIMESEL(&sbt, tmp))
- sbt += tc_tick_sbt;
+ if (precise) {
+ prec = 0;
+ } else {
+ prec = tmp >> tc_precexp;
+ if (TIMESEL(&sbt, tmp))
+ sbt += tc_tick_sbt;
+ }
sbt += tmp;
error = tsleep_sbt(&nanowait[curcpu], PWAIT | PCATCH, "nanslp",
sbt, prec, C_ABSOLUTE);

File Metadata

Mime Type
text/plain
Expires
Tue, Jun 23, 11:02 PM (7 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34225524
Default Alt Text
D50075.id154486.diff (1 KB)

Event Timeline