From 26e4651e9f8a3d373e97d571858d5047d79064f1 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 5 Feb 2024 07:23:32 -0600 Subject: [PATCH] fix infinite recursion in reactive context --- packages/signals/src/rc.rs | 7 +++++-- packages/signals/src/rt.rs | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/signals/src/rc.rs b/packages/signals/src/rc.rs index 709b16067..867879641 100644 --- a/packages/signals/src/rc.rs +++ b/packages/signals/src/rc.rs @@ -19,7 +19,7 @@ pub struct ReactiveContext { } thread_local! { - static CURRENT: RefCell> = RefCell::new(vec![]); + static CURRENT: RefCell> = const { RefCell::new(vec![]) }; } impl ReactiveContext { @@ -42,7 +42,10 @@ impl ReactiveContext { }; let mut self_ = Self { - inner: CopyValue::new_maybe_sync(inner), + inner: CopyValue::new_maybe_sync_in_scope( + inner, + scope.or_else(current_scope_id).unwrap(), + ), }; self_.inner.write().self_ = Some(self_); diff --git a/packages/signals/src/rt.rs b/packages/signals/src/rt.rs index f5039f102..5ea5100ae 100644 --- a/packages/signals/src/rt.rs +++ b/packages/signals/src/rt.rs @@ -55,8 +55,8 @@ fn set_owner(owner: Option>) -> Option> { } thread_local! { - static SYNC_OWNER: RefCell>> = RefCell::new(None); - static UNSYNC_OWNER: RefCell>> = RefCell::new(None); + static SYNC_OWNER: RefCell>> = const { RefCell::new(None) }; + static UNSYNC_OWNER: RefCell>> = const { RefCell::new(None) }; } fn current_owner, T>() -> Owner {