From a10f9496c7dbb7fc62b65ccd741341532f6c9a11 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 22 Jan 2024 08:32:13 -0600 Subject: [PATCH] don't panic in try variants even in release mode --- packages/generational-box/src/sync.rs | 9 ++++++--- packages/generational-box/src/unsync.rs | 16 ++++++++++------ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/generational-box/src/sync.rs b/packages/generational-box/src/sync.rs index 5a7a8a625..ce9f85a37 100644 --- a/packages/generational-box/src/sync.rs +++ b/packages/generational-box/src/sync.rs @@ -90,13 +90,14 @@ impl Storage for SyncStorage { at: crate::GenerationalRefBorrowInfo, ) -> Result { let read = self.0.try_read(); - // .ok_or_else(|| at.borrowed_from.borrow_error())?; #[cfg(any(debug_assertions, feature = "debug_ownership"))] let read = read.ok_or_else(|| at.borrowed_from.borrow_error())?; #[cfg(not(any(debug_assertions, feature = "debug_ownership")))] - let read = read.unwrap(); + let read = read.ok_or_else(|| { + error::BorrowError::AlreadyBorrowedMut(error::AlreadyBorrowedMutError {}) + })?; RwLockReadGuard::try_map(read, |any| any.as_ref()?.downcast_ref()) .map_err(|_| { @@ -127,7 +128,9 @@ impl Storage for SyncStorage { let write = write.ok_or_else(|| at.borrowed_from.borrow_mut_error())?; #[cfg(not(any(debug_assertions, feature = "debug_ownership")))] - let write = write.unwrap(); + let write = write.ok_or_else(|| { + error::BorrowMutError::AlreadyBorrowed(error::AlreadyBorrowedError {}) + })?; RwLockWriteGuard::try_map(write, |any| any.as_mut()?.downcast_mut()) .map_err(|_| { diff --git a/packages/generational-box/src/unsync.rs b/packages/generational-box/src/unsync.rs index d5424c9f1..383051234 100644 --- a/packages/generational-box/src/unsync.rs +++ b/packages/generational-box/src/unsync.rs @@ -1,4 +1,5 @@ use crate::{ + error, references::{GenerationalRef, GenerationalRefMut}, AnyStorage, Mappable, MappableMut, MemoryLocation, MemoryLocationInner, Storage, }; @@ -53,18 +54,20 @@ impl Storage for UnsyncStorage { created_at: &'static std::panic::Location<'static>, #[cfg(any(debug_assertions, feature = "debug_ownership"))] at: crate::GenerationalRefBorrowInfo, - ) -> Result { + ) -> Result { let borrow = self.0.try_borrow(); #[cfg(any(debug_assertions, feature = "debug_ownership"))] let borrow = borrow.map_err(|_| at.borrowed_from.borrow_error())?; #[cfg(not(any(debug_assertions, feature = "debug_ownership")))] - let borrow = borrow.unwrap(); + let borrow = borrow.map_err(|_| { + error::BorrowError::AlreadyBorrowedMut(error::AlreadyBorrowedMutError {}) + })?; Ref::filter_map(borrow, |any| any.as_ref()?.downcast_ref()) .map_err(|_| { - crate::error::BorrowError::Dropped(crate::error::ValueDroppedError { + error::BorrowError::Dropped(error::ValueDroppedError { #[cfg(any(debug_assertions, feature = "debug_ownership"))] created_at, }) @@ -84,18 +87,19 @@ impl Storage for UnsyncStorage { created_at: &'static std::panic::Location<'static>, #[cfg(any(debug_assertions, feature = "debug_ownership"))] at: crate::GenerationalRefMutBorrowInfo, - ) -> Result { + ) -> Result { let borrow = self.0.try_borrow_mut(); #[cfg(any(debug_assertions, feature = "debug_ownership"))] let borrow = borrow.map_err(|_| at.borrowed_from.borrow_mut_error())?; #[cfg(not(any(debug_assertions, feature = "debug_ownership")))] - let borrow = borrow.unwrap(); + let borrow = borrow + .map_err(|_| error::BorrowMutError::AlreadyBorrowed(error::AlreadyBorrowedError {}))?; RefMut::filter_map(borrow, |any| any.as_mut()?.downcast_mut()) .map_err(|_| { - crate::error::BorrowMutError::Dropped(crate::error::ValueDroppedError { + error::BorrowMutError::Dropped(error::ValueDroppedError { #[cfg(any(debug_assertions, feature = "debug_ownership"))] created_at, })