From 7c1736c09f454b83f807e5716988afaaf2d86f3f Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Thu, 21 Jan 2016 20:21:18 -0500
Subject: [PATCH] port from pd-l2ork git:
 d095289d968720dec4fcba7e2c0dcaa95252278e *updated locking mechanism to
 prevent multiple locks or unlocks in a row, which in turn causes crashes on
 newer Intel processors.

---
 pd/src/m_sched.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/pd/src/m_sched.c b/pd/src/m_sched.c
index 9d6bdff8d..a8559b980 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)
-- 
GitLab