diff options
author | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2011-10-09 16:36:37 +0000 |
---|---|---|
committer | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2011-10-09 16:36:37 +0000 |
commit | 21c068f1916330e90f814bed461fe0821d1665ec (patch) | |
tree | 949b73696fff09a44b8d3eb01b70bae7174cbd14 /pd/src/m_sched.c | |
parent | bf8ced1efe1a032342e864edc635fa4e2676670d (diff) |
checked in pd-0.43-0.src.tar.gz
svn path=/trunk/; revision=15557
Diffstat (limited to 'pd/src/m_sched.c')
-rw-r--r-- | pd/src/m_sched.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/pd/src/m_sched.c b/pd/src/m_sched.c index ae9f3664..634db357 100644 --- a/pd/src/m_sched.c +++ b/pd/src/m_sched.c @@ -272,7 +272,7 @@ static void sched_pollformeters( void) /* if there's no GUI but we're running in "realtime", here is where we arrange to ping the watchdog every 2 seconds. */ -#ifdef __linux__ +#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__GNU__) if (sys_nogui && sys_hipriority && (sched_diddsp - sched_nextpingtime > 0)) { glob_watchdog(0); @@ -439,7 +439,7 @@ static void m_pollingscheduler( void) timeforward = sys_send_dacs(); #ifdef THREAD_LOCKING /* T.Grill - done */ - sys_unlock(); + sys_lock(); #endif /* if dacs remain "idle" for 1 sec, they're hung up. */ if (timeforward != 0) @@ -461,7 +461,7 @@ static void m_pollingscheduler( void) idletime = sys_getrealtime(); else if (sys_getrealtime() - idletime > 1.) { - post("audio I/O stuck... closing audio\n"); + error("audio I/O stuck... closing audio\n"); sys_close_audio(); sched_set_using_audio(SCHED_AUDIO_NONE); goto waitfortick; @@ -522,6 +522,7 @@ static void m_pollingscheduler( void) void sched_audio_callbackfn(void) { + sys_lock(); sys_setmiditimediff(0, 1e-6 * sys_schedadvance); sys_addhist(1); sched_tick(sys_time + sys_time_per_dsp_tick); @@ -532,6 +533,7 @@ void sched_audio_callbackfn(void) sys_addhist(5); sched_pollformeters(); sys_addhist(0); + sys_unlock(); } static void m_callbackscheduler(void) @@ -539,11 +541,19 @@ static void m_callbackscheduler(void) sys_initmidiqueue(); while (!sys_quit) { + double timewas = sys_time; #ifdef MSW - Sleep(1000); + Sleep(1000); #else sleep(1); #endif + if (sys_time == timewas) + { + sys_lock(); + sys_pollgui(); + sched_tick(sys_time + sys_time_per_dsp_tick); + sys_unlock(); + } if (sys_idlehook) sys_idlehook(); } |