X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fsync%2Ftest_lockorder_checks.rs;h=a3f746b11dc80dd32bd7badf5f9786acf6426a89;hb=93641540229317b881f86b7a02eba632fd64eb0d;hp=f9f30e2cfa28efb4d42960d3fb4c1afc713b8933;hpb=e8b91a478bd2fd37fd726901271a8299847def3d;p=rust-lightning diff --git a/lightning/src/sync/test_lockorder_checks.rs b/lightning/src/sync/test_lockorder_checks.rs index f9f30e2c..a3f746b1 100644 --- a/lightning/src/sync/test_lockorder_checks.rs +++ b/lightning/src/sync/test_lockorder_checks.rs @@ -1,5 +1,10 @@ use crate::sync::debug_sync::{RwLock, Mutex}; +use super::{LockHeldState, LockTestExt}; + +use std::sync::Arc; +use std::thread; + #[test] #[should_panic] #[cfg(not(feature = "backtrace"))] @@ -92,3 +97,22 @@ fn read_write_lockorder_fail() { let _a = a.write().unwrap(); } } + +#[test] +fn test_thread_locked_state() { + let mtx = Arc::new(Mutex::new(())); + let mtx_ref = Arc::clone(&mtx); + assert_eq!(mtx.held_by_thread(), LockHeldState::NotHeldByThread); + + let lck = mtx.lock().unwrap(); + assert_eq!(mtx.held_by_thread(), LockHeldState::HeldByThread); + + let thrd = std::thread::spawn(move || { + assert_eq!(mtx_ref.held_by_thread(), LockHeldState::NotHeldByThread); + }); + thrd.join().unwrap(); + assert_eq!(mtx.held_by_thread(), LockHeldState::HeldByThread); + + std::mem::drop(lck); + assert_eq!(mtx.held_by_thread(), LockHeldState::NotHeldByThread); +}