X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fsync%2Ffairrwlock.rs;h=23b8c23db282b20ad5c90d3fc937e367e6b6dac6;hb=5fbc44ee58bbaf2a74174b477916abc22b40f765;hp=5715a8cf646cd67e29b7aa5c21c8722d89a45964;hpb=9422370dd2b2ec73115b5950fa5e19db51c8ea73;p=rust-lightning diff --git a/lightning/src/sync/fairrwlock.rs b/lightning/src/sync/fairrwlock.rs index 5715a8cf..23b8c23d 100644 --- a/lightning/src/sync/fairrwlock.rs +++ b/lightning/src/sync/fairrwlock.rs @@ -1,5 +1,6 @@ use std::sync::{LockResult, RwLock, RwLockReadGuard, RwLockWriteGuard, TryLockResult}; use std::sync::atomic::{AtomicUsize, Ordering}; +use super::{LockHeldState, LockTestExt}; /// Rust libstd's RwLock does not provide any fairness guarantees (and, in fact, when used on /// Linux with pthreads under the hood, readers trivially and completely starve writers). @@ -44,7 +45,21 @@ impl FairRwLock { self.lock.read() } + #[allow(dead_code)] pub fn try_write(&self) -> TryLockResult> { self.lock.try_write() } } + +impl<'a, T: 'a> LockTestExt<'a> for FairRwLock { + #[inline] + fn held_by_thread(&self) -> LockHeldState { + // fairrwlock is only built in non-test modes, so we should never support tests. + LockHeldState::Unsupported + } + type ExclLock = RwLockWriteGuard<'a, T>; + #[inline] + fn unsafe_well_ordered_double_lock_self(&'a self) -> RwLockWriteGuard<'a, T> { + self.write().unwrap() + } +}