From 7477c135c1d5bfba6ef246fbbc046944d681cd1c Mon Sep 17 00:00:00 2001 From: HampusM Date: Sat, 10 Oct 2026 16:13:14 +0200 Subject: fix(engine): only submit assets when importer return Ok --- engine/src/asset.rs | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/engine/src/asset.rs b/engine/src/asset.rs index 34f7a85..ea0037c 100644 --- a/engine/src/asset.rs +++ b/engine/src/asset.rs @@ -654,13 +654,14 @@ impl Default for Assets pub struct Submitter<'path> { + pending_messages: Vec, import_work_msg_sender: MpscSender, asset_path: &'path Path, } impl Submitter<'_> { - pub fn submit_store(&self, asset: AssetT) + pub fn submit_store(&mut self, asset: AssetT) where AssetT: Asset, { @@ -669,7 +670,7 @@ impl Submitter<'_> name: None, }; - let _ = self.import_work_msg_sender.send(ImportWorkMessage::Store { + self.pending_messages.push(ImportWorkMessage::Store { do_store: Box::new(move |assets, label| { assets.store_with_label::(label.as_label(), asset); }), @@ -677,7 +678,7 @@ impl Submitter<'_> }); } - pub fn submit_store_named(&self, name: impl AsRef, asset: AssetT) + pub fn submit_store_named(&mut self, name: impl AsRef, asset: AssetT) where AssetT: Asset, { @@ -686,13 +687,20 @@ impl Submitter<'_> name: Some(name.as_ref().into()), }; - let _ = self.import_work_msg_sender.send(ImportWorkMessage::Store { + self.pending_messages.push(ImportWorkMessage::Store { do_store: Box::new(move |assets, label| { assets.store_with_label::(label.as_label(), asset); }), label, }); } + + fn perform_submissions(&mut self) + { + for msg in self.pending_messages.drain(..) { + let _ = self.import_work_msg_sender.send(msg); + } + } } /// Asset handle. @@ -857,12 +865,16 @@ impl WrappedImporterFn }) .transpose()?; - inner_func( - &mut Submitter { import_work_msg_sender, asset_path }, + let mut submitter = Submitter { + pending_messages: Vec::with_capacity(2), + import_work_msg_sender, asset_path, - asset_settings, - ) - .map_err(|err| ImporterError::Other(Box::new(err)))?; + }; + + inner_func(&mut submitter, asset_path, asset_settings) + .map_err(|err| ImporterError::Other(Box::new(err)))?; + + submitter.perform_submissions(); Ok(()) }; -- cgit v1.2.3-18-g5258