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;
 }
 

Reply via email to