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