1use std::{
2 io::prelude::*,
3 ops::Deref,
4 sync::{RwLock, RwLockReadGuard, RwLockWriteGuard},
5};
6
7pub trait HandyRwLock<T: ?Sized> {
12 fn wl(&self) -> RwLockWriteGuard<'_, T>;
13 fn rl(&self) -> RwLockReadGuard<'_, T>;
14}
15
16impl<T: ?Sized> HandyRwLock<T> for RwLock<T> {
17 fn wl(&self) -> RwLockWriteGuard<'_, T> {
18 self.write().unwrap()
19 }
20
21 fn rl(&self) -> RwLockReadGuard<'_, T> {
22 self.read().unwrap()
23 }
24}
25
26pub use crate::{btree::tuple::small_int_schema, utils::init_log};
27
28pub fn lock_state<T>(lock: impl Deref<Target = RwLock<T>>) -> String {
29 let is_read: bool = lock.try_read().is_err();
30 let is_write: bool = lock.try_write().is_err();
31 let is_poisoned: bool = lock.is_poisoned();
32 format!("[r: {}, w: {}, p: {}]", is_read, is_write, is_poisoned)
33}