On Tue, 9 Jan 2007, Stefan Krah wrote:

> Hello,
> 
> it seems that the interval timer is incorrect for a process that is
> started _after_ a sudden date change. Could someone reproduce this
> before I report it as a bug? System is OpenBSD 4.0-stable, i386.

You already reported it. This is a bug. Try this diff from art@

        -Otto

Index: kern_time.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_time.c,v
retrieving revision 1.60
diff -u -r1.60 kern_time.c
--- kern_time.c 30 Oct 2006 20:19:33 -0000      1.60
+++ kern_time.c 9 Jan 2007 16:42:30 -0000
@@ -550,7 +550,7 @@
        if (SCARG(uap, which) == ITIMER_REAL) {
                struct timeval now;
 
-               getmicrotime(&now);
+               getmicrouptime(&now);
                /*
                 * Convert from absolute to relative time in .it_value
                 * part of real time timer.  If time for real time timer

> 
> 
> Here are the steps (program below):
> 
> 
> # ./timertest                                                                 
>                                    
> 0  0  600  0
> 0  0  598  990000
> 0  0  597  980000
> 0  0  596  970000
> 0  0  595  960000
> ^C
> # date
> Tue Jan  9 15:18:23 CET 2007
> # date 1522
> Tue Jan  9 15:22:00 CET 2007
> # 
> # 
> # ./timertest 
> 0  0  389  610000
> 0  0  388  600000
> 0  0  387  590000
> 0  0  386  580000
> 
> 
> timertest.c
> =======================================================================
> #include <sys/time.h>
> 
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
> 
> 
> int main(void)
> {
> 
>         struct itimerval itimer = {{0, 0}, {600, 0}};
> 
> 
>         if (setitimer(ITIMER_REAL, &itimer, (struct itimerval *)NULL)) {
>                 puts("setting itimer failed\n");
>                 exit(1);
>         }
> 
>         while (1) {
>                 getitimer(ITIMER_REAL, &itimer);
>                 printf( "%ld  %ld  %ld  %ld\n", itimer.it_interval.tv_sec,
>                          itimer.it_interval.tv_usec, itimer.it_value.tv_sec,
>                          itimer.it_value.tv_usec );
>                 sleep(1);
>         }
> 
>         return 0;
> }
> =======================================================================
> 
> 
> Stefan Krah

Reply via email to