From c8ed5bf0f1af54618c32df184aae523dc5a20df7 Mon Sep 17 00:00:00 2001 From: ShadowCurse Date: Fri, 21 Jan 2022 16:41:34 +0300 Subject: [PATCH 1/4] added check for TYPE_UUID duplication --- crates/bevy_asset/src/asset_server.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/bevy_asset/src/asset_server.rs b/crates/bevy_asset/src/asset_server.rs index 88f20511ab79c..07a1ef4a45bb0 100644 --- a/crates/bevy_asset/src/asset_server.rs +++ b/crates/bevy_asset/src/asset_server.rs @@ -93,6 +93,15 @@ impl AssetServer { } pub(crate) fn register_asset_type(&self) -> Assets { + if self + .server + .asset_lifecycles + .read() + .contains_key(&T::TYPE_UUID) + { + panic!("Error while registering new asset type. Asset with UUID: {:?} is already registered. Can not register another type with the same UUID", + T::TYPE_UUID); + } self.server.asset_lifecycles.write().insert( T::TYPE_UUID, Box::new(AssetLifecycleChannel::::default()), From c8bb2119c9aeb0f9344e25be8c470c604b9f50ad Mon Sep 17 00:00:00 2001 From: ShadowCurse Date: Sun, 6 Feb 2022 17:58:47 +0300 Subject: [PATCH 2/4] added type info to the message --- crates/bevy_asset/src/asset_server.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/bevy_asset/src/asset_server.rs b/crates/bevy_asset/src/asset_server.rs index 07a1ef4a45bb0..a7da8e412040e 100644 --- a/crates/bevy_asset/src/asset_server.rs +++ b/crates/bevy_asset/src/asset_server.rs @@ -99,8 +99,8 @@ impl AssetServer { .read() .contains_key(&T::TYPE_UUID) { - panic!("Error while registering new asset type. Asset with UUID: {:?} is already registered. Can not register another type with the same UUID", - T::TYPE_UUID); + panic!("Error while registering new asset type: {:?} with UUID: {:?}. Another type with the same UUID is already registered. Can not register new asset type with the same UUID", + std::any::type_name::(), T::TYPE_UUID); } self.server.asset_lifecycles.write().insert( T::TYPE_UUID, From cd75a9840444083e0bd0dcc70702518aaa75c7e0 Mon Sep 17 00:00:00 2001 From: ShadowCurse Date: Tue, 8 Feb 2022 11:38:57 +0300 Subject: [PATCH 3/4] changed to use single read lock --- crates/bevy_asset/src/asset_server.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/crates/bevy_asset/src/asset_server.rs b/crates/bevy_asset/src/asset_server.rs index a7da8e412040e..00bcbe6b5e061 100644 --- a/crates/bevy_asset/src/asset_server.rs +++ b/crates/bevy_asset/src/asset_server.rs @@ -93,16 +93,12 @@ impl AssetServer { } pub(crate) fn register_asset_type(&self) -> Assets { - if self - .server - .asset_lifecycles - .read() - .contains_key(&T::TYPE_UUID) - { + let mut asset_lifecycles = self.server.asset_lifecycles.write(); + if asset_lifecycles.contains_key(&T::TYPE_UUID) { panic!("Error while registering new asset type: {:?} with UUID: {:?}. Another type with the same UUID is already registered. Can not register new asset type with the same UUID", std::any::type_name::(), T::TYPE_UUID); } - self.server.asset_lifecycles.write().insert( + asset_lifecycles.insert( T::TYPE_UUID, Box::new(AssetLifecycleChannel::::default()), ); From 6ae52076a565a183b3da98616707f61b6b82d670 Mon Sep 17 00:00:00 2001 From: ShadowCurse Date: Sat, 12 Feb 2022 15:52:52 +0300 Subject: [PATCH 4/4] refactoring --- crates/bevy_asset/src/asset_server.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/crates/bevy_asset/src/asset_server.rs b/crates/bevy_asset/src/asset_server.rs index 00bcbe6b5e061..fb259ad90f950 100644 --- a/crates/bevy_asset/src/asset_server.rs +++ b/crates/bevy_asset/src/asset_server.rs @@ -93,15 +93,19 @@ impl AssetServer { } pub(crate) fn register_asset_type(&self) -> Assets { - let mut asset_lifecycles = self.server.asset_lifecycles.write(); - if asset_lifecycles.contains_key(&T::TYPE_UUID) { + if self + .server + .asset_lifecycles + .write() + .insert( + T::TYPE_UUID, + Box::new(AssetLifecycleChannel::::default()), + ) + .is_some() + { panic!("Error while registering new asset type: {:?} with UUID: {:?}. Another type with the same UUID is already registered. Can not register new asset type with the same UUID", std::any::type_name::(), T::TYPE_UUID); } - asset_lifecycles.insert( - T::TYPE_UUID, - Box::new(AssetLifecycleChannel::::default()), - ); Assets::new(self.server.asset_ref_counter.channel.sender.clone()) }