Wayland: Fix segfault when exiting with ctrl+q (#11324)

Release Notes:

- N/A

When closing with `ctrl-q`, drop_window is not called and results in a
segfault.
This commit is contained in:
Fernando Tagawa 2024-05-02 20:39:08 -03:00 committed by GitHub
parent b58bf64f0a
commit 7bc1025d91
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -199,18 +199,6 @@ impl WaylandClientStatePtr {
}
}
if state.windows.is_empty() {
// Drop the clipboard to prevent a seg fault after we've closed all Wayland connections.
state.clipboard = None;
state.primary = None;
if let Some(wl_pointer) = &state.wl_pointer {
wl_pointer.release();
}
if let Some(cursor_shape_device) = &state.cursor_shape_device {
cursor_shape_device.destroy();
}
if let Some(data_device) = &state.data_device {
data_device.release();
}
state.common.signal.stop();
}
}
@ -219,6 +207,26 @@ impl WaylandClientStatePtr {
#[derive(Clone)]
pub struct WaylandClient(Rc<RefCell<WaylandClientState>>);
impl Drop for WaylandClient {
fn drop(&mut self) {
let mut state = self.0.borrow_mut();
state.windows.clear();
// Drop the clipboard to prevent a seg fault after we've closed all Wayland connections.
state.primary = None;
state.clipboard = None;
if let Some(wl_pointer) = &state.wl_pointer {
wl_pointer.release();
}
if let Some(cursor_shape_device) = &state.cursor_shape_device {
cursor_shape_device.destroy();
}
if let Some(data_device) = &state.data_device {
data_device.release();
}
}
}
const WL_DATA_DEVICE_MANAGER_VERSION: u32 = 3;
const WL_OUTPUT_VERSION: u32 = 2;