diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-15 08:14:09 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-15 08:14:09 +0400 |
| commit | b87fba2182a0b187c0d991f48d305387d0bea5e3 (patch) | |
| tree | 17995d5a68bb16349cec53965e98fcdc6a2ebd6a /src | |
| parent | 3d63f5e644604a6d749c8c3405fac481b7a34cdd (diff) | |
| download | niri-b87fba2182a0b187c0d991f48d305387d0bea5e3.tar.gz niri-b87fba2182a0b187c0d991f48d305387d0bea5e3.tar.bz2 niri-b87fba2182a0b187c0d991f48d305387d0bea5e3.zip | |
tty: Relax device checks on removal
Diffstat (limited to 'src')
| -rw-r--r-- | src/backend/tty.rs | 45 |
1 files changed, 24 insertions, 21 deletions
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::<State>(); } - 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::<State>(&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>(&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::<State>(&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>(&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"); } } |
