From 6ac2625a75fc73b5cb846cd3d60422976f8946fc Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Fri, 7 Apr 2017 19:33:08 -0500 Subject: [PATCH] drop global critical sections in checked::Resource --- src/checked.rs | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/checked.rs b/src/checked.rs index 87318eca7f..ec4114dfe6 100644 --- a/src/checked.rs +++ b/src/checked.rs @@ -10,25 +10,16 @@ use vcell::VolatileCell; use Ceiling; unsafe fn acquire(locked: &VolatileCell, ceiling: u8) -> u8 { - interrupt::free( - |_| { - assert!(!locked.get(), "resource already locked"); - let old_basepri = basepri::read(); - basepri_max::write(ceiling); - locked.set(true); - old_basepri - }, - ) + assert!(!locked.get(), "resource already locked"); + let old_basepri = basepri::read(); + basepri_max::write(ceiling); + locked.set(true); + old_basepri } unsafe fn release(locked: &VolatileCell, old_basepri: u8) { - // XXX Is it really memory safe to *not* use a global critical section here - // interrupt::free( - // |_| { - locked.set(false); - basepri::write(old_basepri); - // }, - // ); + locked.set(false); + basepri::write(old_basepri); } /// A totally safe `Resource` that panics on misuse @@ -70,7 +61,7 @@ where /// Mutably locks the resource, blocking tasks with priority equal or /// smaller than the ceiling `C` pub fn lock_mut(&'static self, f: F) -> R - where + where F: FnOnce(&mut T) -> R, { unsafe {