[PD-cvs] pd/src m_sched.c,1.5.4.22,1.5.4.23
Tim Blechmann
timblech at users.sourceforge.net
Sun Apr 17 12:11:34 CEST 2005
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14267
Modified Files:
Tag: devel_0_38
m_sched.c
Log Message:
sys_lock during dsp
cleanup of scheduler (it's probably better to use a real profiler)
sys_timedlock()
Index: m_sched.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_sched.c,v
retrieving revision 1.5.4.22
retrieving revision 1.5.4.23
diff -C2 -d -r1.5.4.22 -r1.5.4.23
*** m_sched.c 9 Apr 2005 06:51:13 -0000 1.5.4.22
--- m_sched.c 17 Apr 2005 10:11:32 -0000 1.5.4.23
***************
*** 435,450 ****
if (sched_usedacs)
{
- #ifdef THREAD_LOCKING
- /* T.Grill - send_dacs may sleep ->
- unlock thread lock make that time available
- - could messaging do any harm while sys_send_dacs is running?
- */
- sys_unlock();
- #endif
timeforward = sys_send_dacs();
- #ifdef THREAD_LOCKING
- /* T.Grill - done */
- sys_unlock();
- #endif
/* if dacs remain "idle" for 1 sec, they're hung up. */
if (timeforward != 0)
--- 435,439 ----
***************
*** 488,493 ****
if (sys_pollgui())
{
! if (!didsomething)
! sched_didpoll++;
didsomething = 1;
}
--- 477,482 ----
if (sys_pollgui())
{
! /* if (!didsomething) */
! /* sched_didpoll++; */
didsomething = 1;
}
***************
*** 501,515 ****
/* sys_reportidle(); */
#ifdef THREAD_LOCKING
/* T.Grill - enter idle phase -> unlock thread lock */
! sys_unlock();
#endif
! /* tb: call idle callbacks */
! run_idle_callbacks(timeforward != SENDDACS_SLEPT?sys_sleepgrain:0);
!
#ifdef THREAD_LOCKING
/* T.Grill - leave idle phase -> lock thread lock */
! sys_lock();
#endif
/* sys_addhist(5); */
/* sched_didnothing++; */
--- 490,507 ----
/* sys_reportidle(); */
+ /* tb: call idle callbacks */
+ if (timeforward != SENDDACS_SLEPT)
+ {
#ifdef THREAD_LOCKING
/* T.Grill - enter idle phase -> unlock thread lock */
! sys_unlock();
#endif
! run_idle_callbacks(sys_sleepgrain);
#ifdef THREAD_LOCKING
/* T.Grill - leave idle phase -> lock thread lock */
! sys_lock();
#endif
+ }
+
/* sys_addhist(5); */
/* sched_didnothing++; */
***************
*** 525,534 ****
sys_pollmidiqueue();
if (sys_pollgui())
- {
- if (!didsomething)
- sched_didpoll++;
didsomething = 1;
- }
/* test for idle; if so, do graphics updates. */
--- 517,523 ----
sys_pollmidiqueue();
+
if (sys_pollgui())
didsomething = 1;
/* test for idle; if so, do graphics updates. */
***************
*** 550,553 ****
--- 539,543 ----
}
+
#ifdef THREAD_LOCKING
/* T.Grill - done */
***************
*** 581,591 ****
/* tb { */
int sys_timedlock(int microsec)
{
! struct timespec timeout;
! timeout.tv_sec = 0;
! timeout.tv_nsec = 1000 * microsec;
! return pthread_mutex_timedlock(&sys_mutex, &timeout);
}
/* tb } */
--- 571,590 ----
/* tb { */
+ #include <errno.h>
int sys_timedlock(int microsec)
{
! int count = microsec * 0.001;
! int ret;
! while (count--)
! {
! ret = sys_trylock();
! if (ret == 0)
! return 0;
!
! /* sleep for 100 microsecs */
! sys_microsleep(100);
! }
! return ETIMEDOUT;
}
/* tb } */
More information about the Pd-cvs
mailing list