Skip to content

Commit 7ef0185

Browse files
authored
Fix double-borrow crashes on resize. (#11)
1 parent dce1fa3 commit 7ef0185

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

src/platform_impl/web/event_loop/window_target.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -597,10 +597,19 @@ impl ActiveEventLoop {
597597
let canvas = canvas_clone.clone();
598598

599599
move |new_size| {
600-
let canvas = canvas.borrow();
601-
canvas.set_current_size(new_size);
602-
if canvas.old_size() != new_size {
603-
canvas.set_old_size(new_size);
600+
// Release the canvas borrow before sending events, because event
601+
// processing can synchronously re-enter and attempt to borrow_mut
602+
// the canvas (e.g. to update the cursor), which would panic.
603+
let size_changed = {
604+
let canvas = canvas.borrow();
605+
canvas.set_current_size(new_size);
606+
let changed = canvas.old_size() != new_size;
607+
if changed {
608+
canvas.set_old_size(new_size);
609+
}
610+
changed
611+
};
612+
if size_changed {
604613
runner.send_event(Event::WindowEvent {
605614
window_id: RootWindowId(id),
606615
event: WindowEvent::Resized(new_size),

0 commit comments

Comments
 (0)