From 574e0de431aef23534f80813af3a5fb3ade312b3 Mon Sep 17 00:00:00 2001 From: Richard Dodd Date: Thu, 14 Nov 2024 15:32:00 +0000 Subject: [PATCH 1/3] report type name on borrow failure --- src/world/mod.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/world/mod.rs b/src/world/mod.rs index e78e7a9..95c4bae 100644 --- a/src/world/mod.rs +++ b/src/world/mod.rs @@ -476,9 +476,14 @@ impl World { T: Resource, { let res_id = ResourceId::new::(); - - self.resources.get(&res_id).map(|r| FetchMut { - inner: AtomicRefMut::map(r.borrow_mut(), Box::as_mut), + let resource = self.resources.get(&res_id)?; + + let borrowed_res = match resource.try_borrow_mut() { + Ok(v) => v, + Err(e) => panic!("{}: {e}", std::any::type_name::()) + }; + Some(FetchMut { + inner: AtomicRefMut::map(borrowed_res, Box::as_mut), phantom: PhantomData, }) } From 99ab04b73f34308389845cdbb666ed34692d3c80 Mon Sep 17 00:00:00 2001 From: Richard Dodd Date: Thu, 14 Nov 2024 15:38:38 +0000 Subject: [PATCH 2/3] same for immutable borrow --- src/world/mod.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/world/mod.rs b/src/world/mod.rs index 95c4bae..ce47a41 100644 --- a/src/world/mod.rs +++ b/src/world/mod.rs @@ -426,9 +426,15 @@ impl World { T: Resource, { let res_id = ResourceId::new::(); + let resource = self.resources.get(&res_id)?; - self.resources.get(&res_id).map(|r| Fetch { - inner: AtomicRef::map(r.borrow(), Box::as_ref), + let borrow = match resource.try_borrow() { + Ok(res) => res, + Err(e) => panic!("{}: {e}", std::any::type_name::()) + }; + + Some(Fetch { + inner: AtomicRef::map(borrow, Box::as_ref), phantom: PhantomData, }) } From 1d4e24f91c574b3e89244b469c6c5de75ef01a94 Mon Sep 17 00:00:00 2001 From: Richard Dodd Date: Fri, 28 Feb 2025 12:24:28 +0000 Subject: [PATCH 3/3] fix tests --- src/world/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/world/mod.rs b/src/world/mod.rs index ce47a41..12724c9 100644 --- a/src/world/mod.rs +++ b/src/world/mod.rs @@ -735,7 +735,7 @@ mod tests { #[allow(unused)] #[test] - #[should_panic(expected = "already immutably borrowed")] + #[should_panic(expected = "shred::world::tests::Res: already borrowed")] fn read_write_fails() { let mut world = World::empty(); world.insert(Res);