Don't run effects from dead recycled scopes (#3201)

* Don't run effects from dead recycled scopes

* Fix scheduler
This commit is contained in:
Evan Almloff authored and GitHub committed 2024-11-13 11:48:30 -05:00
1 parent c1f3a6868e
commit 128608f3b2
2 files changed
+20 -21

No files matched your search

+6
View File
@@ -1,6 +1,7 @@
use crate::arena::ElementRef;
use crate::innerlude::{DirtyTasks, Effect};
use crate::nodes::VNodeMount;
use crate::scheduler::ScopeOrder;
use crate::scope_context::SuspenseLocation;
use crate::{
innerlude::{LocalTask, SchedulerMsg},
@@ -129,6 +130,11 @@ impl Runtime {
self.remove_task(id);
}
// Drop all queued effects
self.pending_effects
.borrow_mut()
.remove(&ScopeOrder::new(scope.height, scope.id));
// Drop all hooks in reverse order in case a hook depends on another hook.
for hook in scope.hooks.take().drain(..).rev() {
drop(hook);