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