X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fsync%2Fnostd_sync.rs;h=0f92bd6caa3ad7c914b304db24d5fa69a8456b85;hb=cd5f09b8e34e838041a9dcdc512ddcf37a976634;hp=e17aa6ab15faa5dc33b66dbc1b80ab79fd36cb18;hpb=596ef3bbea61f2e2508efcb98abcb6a9d12a1f5a;p=rust-lightning diff --git a/lightning/src/sync/nostd_sync.rs b/lightning/src/sync/nostd_sync.rs index e17aa6ab..0f92bd6c 100644 --- a/lightning/src/sync/nostd_sync.rs +++ b/lightning/src/sync/nostd_sync.rs @@ -1,30 +1,10 @@ pub use ::alloc::sync::Arc; use core::ops::{Deref, DerefMut}; -use core::time::Duration; use core::cell::{RefCell, Ref, RefMut}; use super::{LockTestExt, LockHeldState}; pub type LockResult = Result; -pub struct Condvar {} - -impl Condvar { - pub fn new() -> Condvar { - Condvar { } - } - - pub fn wait<'a, T>(&'a self, guard: MutexGuard<'a, T>) -> LockResult> { - Ok(guard) - } - - #[allow(unused)] - pub fn wait_timeout<'a, T>(&'a self, guard: MutexGuard<'a, T>, _dur: Duration) -> LockResult<(MutexGuard<'a, T>, ())> { - Ok((guard, ())) - } - - pub fn notify_all(&self) {} -} - pub struct Mutex { inner: RefCell } @@ -57,17 +37,20 @@ impl Mutex { Ok(MutexGuard { lock: self.inner.borrow_mut() }) } - pub fn try_lock<'a>(&'a self) -> LockResult> { - Ok(MutexGuard { lock: self.inner.borrow_mut() }) + pub fn into_inner(self) -> LockResult { + Ok(self.inner.into_inner()) } } -impl LockTestExt for Mutex { +impl<'a, T: 'a> LockTestExt<'a> for Mutex { #[inline] fn held_by_thread(&self) -> LockHeldState { - if self.lock().is_err() { return LockHeldState::HeldByThread; } + if self.inner.try_borrow_mut().is_err() { return LockHeldState::HeldByThread; } else { return LockHeldState::NotHeldByThread; } } + type ExclLock = MutexGuard<'a, T>; + #[inline] + fn unsafe_well_ordered_double_lock_self(&'a self) -> MutexGuard { self.lock().unwrap() } } pub struct RwLock { @@ -125,12 +108,15 @@ impl RwLock { } } -impl LockTestExt for RwLock { +impl<'a, T: 'a> LockTestExt<'a> for RwLock { #[inline] fn held_by_thread(&self) -> LockHeldState { - if self.write().is_err() { return LockHeldState::HeldByThread; } + if self.inner.try_borrow_mut().is_err() { return LockHeldState::HeldByThread; } else { return LockHeldState::NotHeldByThread; } } + type ExclLock = RwLockWriteGuard<'a, T>; + #[inline] + fn unsafe_well_ordered_double_lock_self(&'a self) -> RwLockWriteGuard { self.write().unwrap() } } pub type FairRwLock = RwLock;