From 37a5da34b91783f08c323ed2ae2c7da9df37e8d8 Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jeremy@system76.com>
Date: Fri, 9 Aug 2019 21:18:20 -0600
Subject: [PATCH] Fix pte_osSemaphorePend deadlock

---
 src/platform/pte.rs | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/platform/pte.rs b/src/platform/pte.rs
index bcbae488..bcaf908b 100644
--- a/src/platform/pte.rs
+++ b/src/platform/pte.rs
@@ -340,12 +340,13 @@ pub unsafe extern "C" fn pte_osSemaphorePend(
 ) -> pte_osResult {
     //TODO: pTimeout
     let semaphore = &mut *handle;
-    let mut acquired = false;
-    while !acquired {
-        let _guard = semaphore.lock.lock();
-        if intrinsics::atomic_load(&semaphore.count) > 0 {
-            intrinsics::atomic_xsub(&mut semaphore.count, 1);
-            acquired = true;
+    loop {
+        {
+            let _guard = semaphore.lock.lock();
+            if intrinsics::atomic_load(&semaphore.count) > 0 {
+                intrinsics::atomic_xsub(&mut semaphore.count, 1);
+                break;
+            }
         }
         Sys::sched_yield();
     }
-- 
GitLab