diff --git a/pd/src/m_sched.c b/pd/src/m_sched.c
index a8559b9807ae705d05c621e3f221fd3723dac350..01e3584526c85447c0430391f49447f5a1bcbe6b 100644
--- a/pd/src/m_sched.c
+++ b/pd/src/m_sched.c
@@ -589,8 +589,10 @@ void sys_lock(void)
     //fprintf(stderr,"sys_lock\n");
     if (!sys_mutex_lock)
     {
-        pthread_mutex_lock(&sys_mutex);
-        sys_mutex_lock = 1;
+        int res = pthread_mutex_lock(&sys_mutex);
+        //fprintf(stderr,"lock %d\n", res);
+        if (!res)
+            sys_mutex_lock = 1;
     }
 }
 
@@ -599,14 +601,20 @@ void sys_unlock(void)
     //fprintf(stderr,"sys_unlock\n");
     if (sys_mutex_lock)
     {
-        pthread_mutex_unlock(&sys_mutex);
-        sys_mutex_lock = 0;
+        int res = pthread_mutex_unlock(&sys_mutex);
+        //fprintf(stderr,"unlock %d\n", res);
+        if (!res)
+            sys_mutex_lock = 0;
     }
 }
 
 int sys_trylock(void)
 {
-    return pthread_mutex_trylock(&sys_mutex);
+    int res = pthread_mutex_trylock(&sys_mutex);
+    //fprintf(stderr,"trylock %d\n", res);
+    if (!res)
+        sys_mutex_lock = 1;
+    return res;
 }
 
 #else