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.


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