diff options
author | HampusM <hampus@hampusmat.com> | 2025-02-04 18:04:32 +0100 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2025-02-04 18:04:32 +0100 |
commit | 76d782195e3cc19832ad57ffffda4e953c6970b3 (patch) | |
tree | bd237c61ff895bd71e79a05338727c0ed68ef677 /ecs/src/lock.rs | |
parent | 0d75299fe6b04e0866a44ad484b42703c6a9aa26 (diff) |
chore(ecs): use parking_lot for inner rwlock of Lock
Diffstat (limited to 'ecs/src/lock.rs')
-rw-r--r-- | ecs/src/lock.rs | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/ecs/src/lock.rs b/ecs/src/lock.rs index bc5351f..74b0415 100644 --- a/ecs/src/lock.rs +++ b/ecs/src/lock.rs @@ -1,6 +1,7 @@ use std::mem::transmute; use std::ops::{Deref, DerefMut}; -use std::sync::{PoisonError, RwLock, RwLockReadGuard, RwLockWriteGuard, TryLockError}; + +use parking_lot::{RwLock, RwLockReadGuard, RwLockWriteGuard}; use crate::type_name::TypeName; @@ -27,10 +28,8 @@ where /// Returns `Err` if unavailable (A mutable handle is hold). pub fn read_nonblock(&self) -> Result<ReadGuard<Value>, Error> { - let guard = self.inner.try_read().or_else(|err| match err { - TryLockError::WouldBlock => Err(Error::ReadUnavailable), - TryLockError::Poisoned(poison_err) => Ok(poison_err.into_inner()), - })?; + let guard = self.inner.try_read().ok_or(Error::ReadUnavailable)?; + tracing::trace!("Acquired lock to value of type {}", guard.type_name()); Ok(ReadGuard { inner: guard }) @@ -42,10 +41,8 @@ where /// Returns `Err` if unavailable (A mutable or immutable handle is hold). pub fn write_nonblock(&self) -> Result<WriteGuard<Value>, Error> { - let guard = self.inner.try_write().or_else(|err| match err { - TryLockError::WouldBlock => Err(Error::WriteUnavailable), - TryLockError::Poisoned(poison_err) => Ok(poison_err.into_inner()), - })?; + let guard = self.inner.try_write().ok_or(Error::WriteUnavailable)?; + tracing::trace!( "Acquired mutable lock to value of type {}", guard.type_name() @@ -56,9 +53,7 @@ where pub fn into_inner(self) -> Value { - self.inner - .into_inner() - .unwrap_or_else(PoisonError::into_inner) + self.inner.into_inner() } } |