diff --git a/crates/rhai_impl/src/updates/localsignal.rs b/crates/rhai_impl/src/updates/localsignal.rs index 39edf4d..3d41487 100644 --- a/crates/rhai_impl/src/updates/localsignal.rs +++ b/crates/rhai_impl/src/updates/localsignal.rs @@ -95,7 +95,17 @@ thread_local! { pub fn register_signal(id: u64, signal: Rc) { LOCAL_SIGNALS.with(|registry| { - registry.borrow_mut().insert(id, signal.clone()); + let mut map = registry.borrow_mut(); + + if !map.contains_key(&id) { + if let Some(initial_dyn) = signal.props.get("initial") { + if let Some(initial_str) = initial_dyn.clone().try_cast::() { + signal.data.set_value(&initial_str); + } + } + + map.insert(id, signal.clone()); + } }); } @@ -111,14 +121,6 @@ pub fn handle_localsignal_changes() { for (id, signal) in registry_ref.iter() { let props = &signal.props; - if let Some(initial_dyn) = props.get("initial") { - if let Some(initial_str) = initial_dyn.clone().try_cast::() { - signal.data.set_value(&initial_str); - } else { - log::error!("Failed to set initial falue for localsignal."); - } - } - match get_string_fn(&props, "type", None) { Ok(signal_type) => { match signal_type.to_ascii_lowercase().as_str() {