Skip to content

Commit

Permalink
Merge pull request #13 from quisar/add_upgradable
Browse files Browse the repository at this point in the history
  • Loading branch information
bertptrs authored May 6, 2022
2 parents 4faaae8 + 743cc83 commit 46c92cf
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/parkinglot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,9 @@ pub type DebugMappedReentrantMutexGuard<'a, T> =
pub type TracingRwLock<T> = lock_api::RwLock<TracingRawRwLock, T>;
/// Read guard for [`TracingRwLock`].
pub type TracingRwLockReadGuard<'a, T> = lock_api::RwLockReadGuard<'a, TracingRawRwLock, T>;
/// Upgradable Read guard for [`TracingRwLock`].
pub type TracingRwLockUpgradableReadGuard<'a, T> =
lock_api::RwLockUpgradableReadGuard<'a, TracingRawRwLock, T>;
/// Write guard for [`TracingRwLock`].
pub type TracingRwLockWriteGuard<'a, T> = lock_api::RwLockWriteGuard<'a, TracingRawRwLock, T>;
/// RAII guard for `TracingRwLockReadGuard::map`.
Expand All @@ -146,6 +149,9 @@ pub type TracingMappedRwLockWriteGuard<'a, T> =
pub type DebugRwLock<T> = lock_api::RwLock<DebugRawRwLock, T>;
/// Read guard for [`TracingRwLock`].
pub type DebugRwLockReadGuard<'a, T> = lock_api::RwLockReadGuard<'a, DebugRawRwLock, T>;
/// Upgradable Read guard for [`TracingRwLock`].
pub type DebugRwLockUpgradableReadGuard<'a, T> =
lock_api::RwLockUpgradableReadGuard<'a, DebugRawRwLock, T>;
/// Write guard for [`TracingRwLock`].
pub type DebugRwLockWriteGuard<'a, T> = lock_api::RwLockWriteGuard<'a, DebugRawRwLock, T>;
/// RAII guard for `DebugRwLockReadGuard::map`.
Expand Down Expand Up @@ -256,6 +262,18 @@ mod tests {
.unwrap();
}

#[test]
fn test_rwlock_upgradable_read_usage() {
let lock = Arc::new(TracingRwLock::new(()));

// Should be able to acquire an upgradable read lock.
let upgradable_guard: TracingRwLockUpgradableReadGuard<'_, _> = lock.upgradable_read();

// Should be able to upgrade the guard.
let _write_guard: TracingRwLockWriteGuard<'_, _> =
TracingRwLockUpgradableReadGuard::upgrade(upgradable_guard);
}

#[test]
fn test_once_usage() {
let once = Arc::new(TracingOnce::new());
Expand Down

0 comments on commit 46c92cf

Please sign in to comment.