From c91969d828d79fb772116e8796af21b3dba1c6a4 Mon Sep 17 00:00:00 2001 From: Rom Grk Date: Mon, 4 Mar 2024 08:57:47 -0500 Subject: [PATCH] linux/wayland: prevent possible panic (#8824) Prevent a panic from arising from this case: https://github.com/zed-industries/zed/pull/8632#discussion_r1510015928 It's not really safe to dispatch any action before dropping the state borrow, because it may need to be modified. --- crates/gpui/src/platform/linux/wayland/client.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/crates/gpui/src/platform/linux/wayland/client.rs b/crates/gpui/src/platform/linux/wayland/client.rs index 0bbd716e06..8ac18b78c3 100644 --- a/crates/gpui/src/platform/linux/wayland/client.rs +++ b/crates/gpui/src/platform/linux/wayland/client.rs @@ -558,11 +558,12 @@ impl Dispatch for WaylandClientState { return TimeoutAction::Drop; } - state_ - .keyboard_focused_window - .as_ref() - .unwrap() - .handle_input(input.clone()); + let focused_window = + state_.keyboard_focused_window.as_ref().unwrap().clone(); + + drop(state_); + + focused_window.handle_input(input.clone()); TimeoutAction::ToDuration(Duration::from_secs(1) / rate) })