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