Forgot to attach the patch :o)
Regards, Samuel
--- oRTP-orig/src/posixtimer.c 2004-11-18 16:58:14.000000000 +0100 +++ oRTP/src/posixtimer.c 2005-03-01 20:54:02.000000000 +0100 @@ -23,32 +23,17 @@ #ifndef _WIN32 -#include <signal.h> -#include <math.h> +#include <sys/select.h> +#include <sys/time.h> +#include <sys/types.h> +#include <unistd.h> static struct timeval orig,cur; static guint32 posix_timer_time=0; /*in milisecond */ -static void dummy_handler(int signum) -{ -} - - void posix_timer_init() { - struct itimerval timer; - sigset_t set; - /* block the SIGALRM signal */ - sigemptyset(&set); - sigaddset(&set,SIGALRM); - sigprocmask(SIG_BLOCK,&set,NULL); - timer.it_value.tv_sec=posix_timer.interval.tv_sec; - timer.it_value.tv_usec=posix_timer.interval.tv_usec; - timer.it_interval.tv_sec=posix_timer.interval.tv_sec; - timer.it_interval.tv_usec=posix_timer.interval.tv_usec; - signal(SIGALRM,dummy_handler); - setitimer(ITIMER_REAL,&timer,NULL); posix_timer.state=RTP_TIMER_RUNNING; gettimeofday(&orig,NULL); posix_timer_time=0; @@ -59,21 +44,19 @@ void posix_timer_do() { - sigset_t set; gint32 diff,time; + struct timeval tv; gettimeofday(&cur,NULL); time=((cur.tv_usec-orig.tv_usec)/1000 ) + ((cur.tv_sec-orig.tv_sec)*1000 ); if ( (diff=time-posix_timer_time)>50){ g_warning("Must catchup %i miliseconds.",diff); } - while(time<posix_timer_time) + while((diff = posix_timer_time-time) > 0) { - - sigfillset(&set); - sigdelset(&set,SIGALRM); - signal(SIGALRM,dummy_handler); - sigsuspend(&set); + tv.tv_sec = diff/1000; + tv.tv_usec = (diff%1000)*1000; + select(0,NULL,NULL,NULL,&tv); gettimeofday(&cur,NULL); time=((cur.tv_usec-orig.tv_usec)/1000 ) + ((cur.tv_sec-orig.tv_sec)*1000 ); } @@ -83,10 +66,6 @@ void posix_timer_uninit() { - struct itimerval timer; - /* unset the timer */ - memset(&timer,0,sizeof(struct itimerval)); - setitimer(ITIMER_REAL,&timer,NULL); posix_timer.state=RTP_TIMER_STOPPED; }