From ef88c3b2bdbed8b98cd815699189f422a0ad3ef9 Mon Sep 17 00:00:00 2001 From: robtfm <50659922+robtfm@users.noreply.github.com> Date: Thu, 17 Aug 2023 21:56:41 +0100 Subject: [PATCH] fix asset loader preregistration for multiple assets (#9453) # Objective fix #9452 when multiple assets are queued to a preregistered loader, only one gets unblocked when the real loader is registered. ## Solution i thought async_channel receivers worked like broadcast channels, but in fact the notification is only received by a single receiver, so only a single waiting asset is unblocked. close the sender instead so that all blocked receivers are unblocked. --- crates/bevy_asset/src/asset_server.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_asset/src/asset_server.rs b/crates/bevy_asset/src/asset_server.rs index 2217c80c99..e5daf11126 100644 --- a/crates/bevy_asset/src/asset_server.rs +++ b/crates/bevy_asset/src/asset_server.rs @@ -236,7 +236,7 @@ impl AssetServer { loaders[existing_index] = MaybeAssetLoader::Ready(Arc::new(loader)); if let Some(sender) = maybe_sender { // notify after replacing the loader - let _ = sender.send_blocking(()); + let _ = sender.close(); } } else { loaders.push(MaybeAssetLoader::Ready(Arc::new(loader)));