extend the subscriber list instead of overriding it; fixes subscribers added in mark_dirty (#2319)

This commit is contained in:
Evan Almloff authored and GitHub committed 2024-04-25 13:57:46 -04:00
1 parent 88f3558419
commit 61360ea05f
1 file changed
+2 -1
+2 -1
View File
@@ -155,7 +155,8 @@ impl<T: 'static, S: Storage<SignalData<T>>> Signal<T, S> {
// We cannot hold the subscribers lock while calling mark_dirty, because mark_dirty can run user code which may cause a new subscriber to be added. If we hold the lock, we will deadlock.
let mut subscribers = std::mem::take(&mut *inner.subscribers.lock().unwrap());
subscribers.retain(|reactive_context| reactive_context.mark_dirty());
*inner.subscribers.lock().unwrap() = subscribers;
// Extend the subscribers list instead of overwriting it in case a subscriber is added while reactive contexts are marked dirty
inner.subscribers.lock().unwrap().extend(subscribers);
}
}