From 1fdc14300e31cfcd386229ac65ae81dfe393c474 Mon Sep 17 00:00:00 2001 From: David Stern Date: Fri, 6 Feb 2026 19:15:38 -0500 Subject: [PATCH] Fix double-borrow crashes on resize. --- .../web/event_loop/window_target.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/platform_impl/web/event_loop/window_target.rs b/src/platform_impl/web/event_loop/window_target.rs index 142466ab0b..e1bdf4b56d 100644 --- a/src/platform_impl/web/event_loop/window_target.rs +++ b/src/platform_impl/web/event_loop/window_target.rs @@ -597,10 +597,19 @@ impl ActiveEventLoop { let canvas = canvas_clone.clone(); move |new_size| { - let canvas = canvas.borrow(); - canvas.set_current_size(new_size); - if canvas.old_size() != new_size { - canvas.set_old_size(new_size); + // Release the canvas borrow before sending events, because event + // processing can synchronously re-enter and attempt to borrow_mut + // the canvas (e.g. to update the cursor), which would panic. + let size_changed = { + let canvas = canvas.borrow(); + canvas.set_current_size(new_size); + let changed = canvas.old_size() != new_size; + if changed { + canvas.set_old_size(new_size); + } + changed + }; + if size_changed { runner.send_event(Event::WindowEvent { window_id: RootWindowId(id), event: WindowEvent::Resized(new_size),