diff options
Diffstat (limited to 'ecs/src')
-rw-r--r-- | ecs/src/lock.rs | 19 | ||||
-rw-r--r-- | ecs/src/system.rs | 7 |
2 files changed, 10 insertions, 16 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() } } diff --git a/ecs/src/system.rs b/ecs/src/system.rs index a810741..48c2723 100644 --- a/ecs/src/system.rs +++ b/ecs/src/system.rs @@ -3,7 +3,6 @@ use std::convert::Infallible; use std::fmt::Debug; use std::marker::PhantomData; use std::ops::{Deref, DerefMut}; -use std::panic::{RefUnwindSafe, UnwindSafe}; use ecs_macros::Component; use seq_macro::seq; @@ -49,7 +48,7 @@ macro_rules! impl_system { impl<'world, Func, #(TParam~I,)*> System<'world, fn(#(TParam~I,)*)> for Func where - Func: Fn(#(TParam~I,)*) + Copy + RefUnwindSafe + UnwindSafe + 'static, + Func: Fn(#(TParam~I,)*) + Copy + 'static, #(TParam~I: Param<'world, Input = ()>,)* { type Input = Infallible; @@ -123,7 +122,7 @@ pub trait Into<Impl> pub struct TypeErased { - data: Box<dyn Any + RefUnwindSafe + UnwindSafe>, + data: Box<dyn Any>, run: Box<TypeErasedRunFn>, } @@ -151,7 +150,7 @@ impl Debug for TypeErased } /// Function in [`TypeErased`] used to run the system. -type TypeErasedRunFn = dyn Fn(&dyn Any, &World) + RefUnwindSafe + UnwindSafe; +type TypeErasedRunFn = dyn Fn(&dyn Any, &World); /// A parameter to a [`System`]. pub trait Param<'world> |