drop scopes in order when dropping the virtual dom

This commit is contained in:
Evan Almloff committed 2024-01-23 11:40:45 -06:00
1 parent 94c0c2e5b9
commit c172914b21
2 files changed
+7 -3

No files matched your search

+1 -1
View File
@@ -64,7 +64,7 @@ impl VirtualDom {
self.elements.try_remove(el.0).map(|_| ()) self.elements.try_remove(el.0).map(|_| ())
} }
// Drop a scope and all its children // Drop a scope without dropping its children
// //
// Note: This will not remove any ids from the arena // Note: This will not remove any ids from the arena
pub(crate) fn drop_scope(&mut self, id: ScopeId) { pub(crate) fn drop_scope(&mut self, id: ScopeId) {
+6 -2
View File
@@ -762,7 +762,11 @@ impl VirtualDom {
impl Drop for VirtualDom { impl Drop for VirtualDom {
fn drop(&mut self) { fn drop(&mut self) {
// Simply drop this scope which drops all of its children // Drop all scopes in order of height
self.drop_scope(ScopeId::ROOT); let mut scopes = self.scopes.drain().collect::<Vec<_>>();
scopes.sort_by_key(|scope| scope.context().height);
for scope in scopes.into_iter().rev() {
drop(scope);
}
} }
} }