Skip to content

Commit 96444b2

Browse files
authored
Fix file_watcher feature hanging indefinitely (#10585)
# Objective Fix the `bevy_asset/file_watcher` feature in practice depending on multithreading, while not informing the user of it. **As I understand it** (I didn't check it), the file watcher feature depends on spawning a concurrent thread to receive file update events from the `notify-debouncer-full` crate. But if multithreading is disabled, that thread will never have time to read the events and consume them. - Fixes #10573 ## Solution Add a `compile_error!` causing compilation failure if `file_watcher` is enabled while `multi-threaded` is disabled. This is considered better than adding a dependency on `multi-threaded` on the `file_watcher`, as (according to @mockersf) toggling on/off `multi-threaded` has a non-zero chance of changing behavior. And we shouldn't implicitly change behavior. A compilation failure prevents compilation of code that is invalid, while informing the user of the steps needed to fix it.
1 parent ef50b3c commit 96444b2

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

crates/bevy_asset/src/lib.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ use bevy_log::error;
5252
use bevy_reflect::{FromReflect, GetTypeRegistration, Reflect, TypePath};
5353
use std::{any::TypeId, sync::Arc};
5454

55+
#[cfg(all(feature = "file_watcher", not(feature = "multi-threaded")))]
56+
compile_error!(
57+
"The \"file_watcher\" feature for hot reloading requires the \
58+
\"multi-threaded\" feature to be functional.\n\
59+
Consider either disabling the \"file_watcher\" feature or enabling \"multi-threaded\""
60+
);
61+
5562
/// Provides "asset" loading and processing functionality. An [`Asset`] is a "runtime value" that is loaded from an [`AssetSource`],
5663
/// which can be something like a filesystem, a network, etc.
5764
///

0 commit comments

Comments
 (0)