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