1 $DragonFly: site/data/docs/nanosleep/tvtohz.patch,v 1.1 2004/01/22 21:55:58 justin Exp $
4 ===================================================================
5 RCS file: /mnt/cvs-repositories/dcvs/src/sys/kern/kern_clock.c,v
6 retrieving revision 1.12
7 diff -u -r1.12 kern_clock.c
8 --- kern_clock.c 17 Oct 2003 07:30:42 -0000 1.12
9 +++ kern_clock.c 13 Dec 2003 00:45:39 -0000
13 } else if (sec <= LONG_MAX / 1000000)
14 - ticks = (sec * 1000000 + (unsigned long)usec + (tick - 1))
16 + ticks = (sec * 1000000 + (unsigned long)usec + (tick-1))
18 else if (sec <= LONG_MAX / hz)
20 - + ((unsigned long)usec + (tick - 1)) / tick + 1;
21 + + ((unsigned long)usec + (tick-1)) / tick;
26 ===================================================================
27 RCS file: /mnt/cvs-repositories/dcvs/src/sys/kern/kern_time.c,v
28 retrieving revision 1.11
29 diff -u -r1.11 kern_time.c
30 --- kern_time.c 20 Nov 2003 06:05:30 -0000 1.11
31 +++ kern_time.c 13 Dec 2003 00:43:24 -0000
34 struct timespec ts, ts2, ts3;
37 + int error, sleepticks;
39 if (rqt->tv_nsec < 0 || rqt->tv_nsec >= 1000000000)
42 timespecadd(&ts, rqt);
43 TIMESPEC_TO_TIMEVAL(&tv, rqt);
45 + sleepticks = tvtohz(&tv);
46 error = tsleep(&nanowait, PCATCH, "nanslp",
48 + (sleepticks < 1)? 1 : sleepticks);
50 if (error != EWOULDBLOCK) {
51 if (error == ERESTART)
53 timespecsub(&ts, &ts2);
57 + rmt->tv_sec = ts.tv_sec;
58 + rmt->tv_nsec = ts.tv_nsec;
62 if (timespeccmp(&ts2, &ts, >=))
65 + ts3.tv_sec = ts.tv_sec;
66 + ts3.tv_nsec = ts.tv_nsec;
67 timespecsub(&ts3, &ts2);
68 TIMESPEC_TO_TIMEVAL(&tv, &ts3);
69 + if (tv.tv_sec == 0 && tv.tv_usec < tick)