From 02456c10682ce14a8858dcc90c3fbb808e3c80d1 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Tue, 5 Sep 2023 21:21:54 -0500 Subject: [PATCH] fix double drop of bubble id --- packages/core/src/arena.rs | 4 +++- packages/core/src/virtual_dom.rs | 3 ++- packages/core/tests/event_propagation.rs | 6 +++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/core/src/arena.rs b/packages/core/src/arena.rs index a44e31f5a..5fb5fa6cb 100644 --- a/packages/core/src/arena.rs +++ b/packages/core/src/arena.rs @@ -162,7 +162,9 @@ impl VirtualDom { let element_refs_slab = &mut self.element_refs; for element_ref in element_refs.drain(..) { println!("Dropping element ref {:?}", element_ref); - element_refs_slab[element_ref.0].template = None; + if let Some(element_ref) = element_refs_slab.get_mut(element_ref.0) { + element_ref.template = None; + } } } diff --git a/packages/core/src/virtual_dom.rs b/packages/core/src/virtual_dom.rs index c1043fc41..eedfd6b9b 100644 --- a/packages/core/src/virtual_dom.rs +++ b/packages/core/src/virtual_dom.rs @@ -371,7 +371,8 @@ impl VirtualDom { // Loop through each dynamic attribute (in a depth first order) in this template before moving up to the template's parent. while let Some(el_ref) = parent_path { // safety: we maintain references of all vnodes in the element slab - let template = unsafe { &*el_ref.template.unwrap() }; + let template = + unsafe { &*el_ref.template.expect("template reference should be valid") }; let node_template = template.template.get(); let target_path = el_ref.path; diff --git a/packages/core/tests/event_propagation.rs b/packages/core/tests/event_propagation.rs index 2a87db175..be59c3fad 100644 --- a/packages/core/tests/event_propagation.rs +++ b/packages/core/tests/event_propagation.rs @@ -42,7 +42,11 @@ fn app(cx: Scope) -> Element { *CLICKS.lock().unwrap() += 1; }, - problematic_child {} + vec![ + render! { + problematic_child {} + } + ].into_iter() } } }