diff --git a/CHANGELOG.md b/CHANGELOG.md index 81510c43d..c265c990c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,9 @@ PR's changelog entry would go into the wrong section). And please only add new entries to the top of this list, right below the `# Unreleased` header. -# Unreleased +# 0.29.13 + +- On Web, fix possible crash with `ControlFlow::Wait` and `ControlFlow::WaitUntil`. # 0.29.12 diff --git a/src/platform_impl/web/web_sys/schedule.rs b/src/platform_impl/web/web_sys/schedule.rs index f13a3b1a0..0682b3b85 100644 --- a/src/platform_impl/web/web_sys/schedule.rs +++ b/src/platform_impl/web/web_sys/schedule.rs @@ -117,9 +117,7 @@ impl Schedule { let channel = MessageChannel::new().unwrap(); let closure = Closure::new(f); let port_1 = channel.port1(); - port_1 - .add_event_listener_with_callback("message", closure.as_ref().unchecked_ref()) - .expect("Failed to set message handler"); + port_1.set_onmessage(Some(closure.as_ref().unchecked_ref())); port_1.start(); let port_2 = channel.port2(); @@ -178,6 +176,7 @@ impl Drop for Schedule { } => { window.clear_timeout_with_handle(*handle); port.close(); + port.set_onmessage(None); } } }