fix: try to guard against double drop
This commit is contained in:
1 parent
651ab3e7e3
commit
56d193d196
1 file changed
+5
-4
@@ -136,8 +136,8 @@ impl VirtualDom {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Descend through the tree, removing any borrowed props and listeners
|
/// Descend through the tree, removing any borrowed props and listeners
|
||||||
pub(crate) fn ensure_drop_safety(&self, scope: ScopeId) {
|
pub(crate) fn ensure_drop_safety(&self, scope_id: ScopeId) {
|
||||||
let scope = &self.scopes[scope.0];
|
let scope = &self.scopes[scope_id.0];
|
||||||
|
|
||||||
// make sure we drop all borrowed props manually to guarantee that their drop implementation is called before we
|
// make sure we drop all borrowed props manually to guarantee that their drop implementation is called before we
|
||||||
// run the hooks (which hold an &mut Reference)
|
// run the hooks (which hold an &mut Reference)
|
||||||
@@ -145,8 +145,9 @@ impl VirtualDom {
|
|||||||
let mut props = scope.borrowed_props.borrow_mut();
|
let mut props = scope.borrowed_props.borrow_mut();
|
||||||
props.drain(..).for_each(|comp| {
|
props.drain(..).for_each(|comp| {
|
||||||
let comp = unsafe { &*comp };
|
let comp = unsafe { &*comp };
|
||||||
if let Some(scope_id) = comp.scope.get() {
|
match comp.scope.get() {
|
||||||
self.ensure_drop_safety(scope_id);
|
Some(child) if child != scope_id => self.ensure_drop_safety(child),
|
||||||
|
_ => (),
|
||||||
}
|
}
|
||||||
drop(comp.props.take());
|
drop(comp.props.take());
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in new issue
Block a user