From c4b85c1a689bbcb4f86b31e46a93222e8ac7a2da Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Thu, 21 Jan 2016 21:14:49 -0500
Subject: [PATCH] port from pd-l2ork git:
 92988822a1fd8571e2a8b3ba4f7c394bc46c9c63  *fixed typo in the m_sched.c that
 caused problems with pthread, merged some of the upstream code cleanup

---
 pd/src/m_sched.c | 13 ++++++++-----
 pd/src/s_stuff.h |  2 +-
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/pd/src/m_sched.c b/pd/src/m_sched.c
index 01e358452..981b7d2bd 100644
--- a/pd/src/m_sched.c
+++ b/pd/src/m_sched.c
@@ -362,8 +362,9 @@ void sched_set_using_audio(int flag)
 }
 
     /* take the scheduler forward one DSP tick, also handling clock timeouts */
-void sched_tick(double next_sys_time)
+void sched_tick(void )
 {
+    double next_sys_time = sys_time + sys_time_per_dsp_tick;
     int countdown = 5000;
     while (clock_setlist && clock_setlist->c_settime < next_sys_time)
     {
@@ -441,7 +442,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)
@@ -481,7 +482,7 @@ static void m_pollingscheduler( void)
         sys_setmiditimediff(0, 1e-6 * sys_schedadvance);
         sys_addhist(1);
         if (timeforward != SENDDACS_NO)
-            sched_tick(sys_time + sys_time_per_dsp_tick);
+            sched_tick();
         if (timeforward == SENDDACS_YES)
             didsomething = 1;
 
@@ -524,9 +525,10 @@ 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);
+    sched_tick();
     sys_addhist(2);
     sys_pollmidiqueue();
     sys_addhist(3);
@@ -534,6 +536,7 @@ void sched_audio_callbackfn(void)
     sys_addhist(5);
     sched_pollformeters();
     sys_addhist(0);
+    sys_unlock();
 }
 
 static void m_callbackscheduler(void)
@@ -573,7 +576,7 @@ int m_batchmain(void)
     sys_time_per_dsp_tick = (TIMEUNITPERSEC) *
         ((double)sys_schedblocksize) / sys_dacsr;
     while (sys_quit != SYS_QUIT_QUIT)
-        sched_tick(sys_time + sys_time_per_dsp_tick);
+        sched_tick();
     return (0);
 }
 
diff --git a/pd/src/s_stuff.h b/pd/src/s_stuff.h
index f1b71be2a..d9f77a0a5 100644
--- a/pd/src/s_stuff.h
+++ b/pd/src/s_stuff.h
@@ -350,7 +350,7 @@ EXTERN void sys_clearhist(void );
 EXTERN void sys_initmidiqueue(void );
 EXTERN int sys_addhist(int phase);
 EXTERN void sys_setmiditimediff(double inbuftime, double outbuftime);
-EXTERN void sched_tick(double next_sys_time);
+EXTERN void sched_tick(void );
 EXTERN void sys_pollmidiqueue(void );
 EXTERN int sys_pollgui(void );
 EXTERN void sys_setchsr(int chin, int chout, int sr);
-- 
GitLab