[PD-cvs] pd/src m_sched.c,1.5.4.33,1.5.4.34
Tim Blechmann
timblech at users.sourceforge.net
Sun May 15 23:10:15 CEST 2005
- Previous message: [PD-cvs] pd/src s_audio.c, 1.5.4.15, 1.5.4.16 s_audio_pa.c, 1.4.4.5, 1.4.4.6 s_stuff.h, 1.5.4.9, 1.5.4.10
- Next message: [PD-cvs] extensions/gui/ix mat-demo.pd,NONE,1.1 mat.wid,NONE,1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2805
Modified Files:
Tag: devel_0_38
m_sched.c
Log Message:
rewrote sys_timedlock to work on osx, too
Index: m_sched.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_sched.c,v
retrieving revision 1.5.4.33
retrieving revision 1.5.4.34
diff -C2 -d -r1.5.4.33 -r1.5.4.34
*** m_sched.c 15 May 2005 18:51:15 -0000 1.5.4.33
--- m_sched.c 15 May 2005 21:10:12 -0000 1.5.4.34
***************
*** 545,548 ****
--- 545,549 ----
#ifdef THREAD_LOCKING
static pthread_mutex_t sys_mutex = PTHREAD_MUTEX_INITIALIZER;
+ static pthread_cond_t sys_cond = PTHREAD_COND_INITIALIZER;
void sys_lock(void)
***************
*** 554,557 ****
--- 555,559 ----
{
pthread_mutex_unlock(&sys_mutex);
+ pthread_cond_signal(&sys_cond);
}
***************
*** 577,580 ****
--- 579,616 ----
#endif
+
+ #if 0
+ /* osx doesn't define a pthread_mutex_timedlock ... maybe someday
+ it will ... */
+ int sys_timedlock(int microsec)
+ {
+ struct timespec timeout;
+ int ret;
+ struct timeval now;
+
+ /* timedlock seems to have a resolution of 1ms */
+ if (microsec < 1e3)
+ microsec = 1e3;
+
+ gettimeofday(&now,0);
+
+ timeout.tv_sec = now.tv_sec;
+ timeout.tv_nsec = (now.tv_usec + microsec) * 1000;
+
+ while (timeout.tv_nsec > 1e9)
+ {
+ timeout.tv_sec += 1;
+ timeout.tv_nsec -= 1e9;
+ }
+
+ ret = pthread_mutex_timedlock(&sys_mutex, &timeout);
+
+ if (ret)
+ post("timeout, %d", ret);
+
+ return ret;
+ }
+ #else
+
int sys_timedlock(int microsec)
{
***************
*** 582,592 ****
int ret;
struct timeval now;
!
! /* timedlock seems to have a resolution of 1ms */
if (microsec < 1e3)
microsec = 1e3;
- gettimeofday(&now,0);
-
timeout.tv_sec = now.tv_sec;
timeout.tv_nsec = (now.tv_usec + microsec) * 1000;
--- 618,630 ----
int ret;
struct timeval now;
!
! if (sys_trylock() == 0)
! return 0;
!
if (microsec < 1e3)
microsec = 1e3;
+
+ gettimeofday(&now,0);
timeout.tv_sec = now.tv_sec;
timeout.tv_nsec = (now.tv_usec + microsec) * 1000;
***************
*** 597,608 ****
timeout.tv_nsec -= 1e9;
}
-
- ret = pthread_mutex_timedlock(&sys_mutex, &timeout);
! if (ret)
! post("timeout");
return ret;
}
/* tb } */
--- 635,650 ----
timeout.tv_nsec -= 1e9;
}
!
! /* in case the lock has been released during the system call, try
! again before waiting for the signal */
! if (sys_trylock() == 0)
! return 0;
!
! ret = pthread_cond_timedwait(&sys_cond, &sys_mutex, &timeout);
return ret;
}
+ #endif
/* tb } */
- Previous message: [PD-cvs] pd/src s_audio.c, 1.5.4.15, 1.5.4.16 s_audio_pa.c, 1.4.4.5, 1.4.4.6 s_stuff.h, 1.5.4.9, 1.5.4.10
- Next message: [PD-cvs] extensions/gui/ix mat-demo.pd,NONE,1.1 mat.wid,NONE,1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Pd-cvs
mailing list