setitimer incorrectly sets timer to negative value
after first call to uclock(). Try example below:
#include <signal.h>
#include <sys/time.h>
volatile int flag = 0;
void timersig(int sig)
{
flag++;
}
int main(void)
{
struct itimerval timer;
signal(SIGALRM, timersig);
timer = (struct itimerval){{0, 0}, {5, 0}};
setitimer(ITIMER_REAL, &timer, NULL);
while(!flag)
getitimer(ITIMER_REAL, &timer);
flag--;
timer = (struct itimerval){{0, 0}, {5, 0}};
setitimer(ITIMER_REAL, &timer, NULL);
while(!flag)
getitimer(ITIMER_REAL, &timer);
signal(SIGALRM, SIG_DFL);
return(0);
}