From b87fba2182a0b187c0d991f48d305387d0bea5e3 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Wed, 15 May 2024 08:14:09 +0400 Subject: tty: Relax device checks on removal --- src/backend/tty.rs | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/backend/tty.rs b/src/backend/tty.rs index a96eb064..65ecd458 100644 --- a/src/backend/tty.rs +++ b/src/backend/tty.rs @@ -644,7 +644,7 @@ impl Tty { lease_state.disable_global::(); } - if node == self.primary_node { + if node == self.primary_node || device.render_node == self.primary_render_node { match self.gpu_manager.single_renderer(&device.render_node) { Ok(mut renderer) => renderer.unbind_wl_display(), Err(err) => { @@ -653,27 +653,30 @@ impl Tty { } // Disable and destroy the dmabuf global. - let global = self.dmabuf_global.take().unwrap(); - niri.dmabuf_state - .disable_global::(&niri.display_handle, &global); - niri.event_loop - .insert_source( - Timer::from_duration(Duration::from_secs(10)), - move |_, _, state| { - state - .niri - .dmabuf_state - .destroy_global::(&state.niri.display_handle, global); - TimeoutAction::Drop - }, - ) - .unwrap(); - - // Clear the dmabuf feedbacks for all surfaces. - for device in self.devices.values_mut() { - for surface in device.surfaces.values_mut() { - surface.dmabuf_feedback = None; + if let Some(global) = self.dmabuf_global.take() { + niri.dmabuf_state + .disable_global::(&niri.display_handle, &global); + niri.event_loop + .insert_source( + Timer::from_duration(Duration::from_secs(10)), + move |_, _, state| { + state + .niri + .dmabuf_state + .destroy_global::(&state.niri.display_handle, global); + TimeoutAction::Drop + }, + ) + .unwrap(); + + // Clear the dmabuf feedbacks for all surfaces. + for device in self.devices.values_mut() { + for surface in device.surfaces.values_mut() { + surface.dmabuf_feedback = None; + } } + } else { + error!("dmabuf global was already missing"); } } -- cgit