diff --git a/pd/src/m_sched.c b/pd/src/m_sched.c
index 9d6bdff8d539dad0866e541f264887ad4548dd49..a8559b9807ae705d05c621e3f221fd3723dac350 100644
--- a/pd/src/m_sched.c
+++ b/pd/src/m_sched.c
@@ -581,15 +581,27 @@ int m_batchmain(void)
 
 #ifdef THREAD_LOCKING
 static pthread_mutex_t sys_mutex = PTHREAD_MUTEX_INITIALIZER;
+static int sys_mutex_lock = 0;
+//#include <stdio.h>
 
 void sys_lock(void)
 {
-    pthread_mutex_lock(&sys_mutex);
+    //fprintf(stderr,"sys_lock\n");
+    if (!sys_mutex_lock)
+    {
+        pthread_mutex_lock(&sys_mutex);
+        sys_mutex_lock = 1;
+    }
 }
 
 void sys_unlock(void)
 {
-    pthread_mutex_unlock(&sys_mutex);
+    //fprintf(stderr,"sys_unlock\n");
+    if (sys_mutex_lock)
+    {
+        pthread_mutex_unlock(&sys_mutex);
+        sys_mutex_lock = 0;
+    }
 }
 
 int sys_trylock(void)