aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-05-15 08:14:09 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-05-15 08:14:09 +0400
commitb87fba2182a0b187c0d991f48d305387d0bea5e3 (patch)
tree17995d5a68bb16349cec53965e98fcdc6a2ebd6a /src
parent3d63f5e644604a6d749c8c3405fac481b7a34cdd (diff)
downloadniri-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.rs45
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");
}
}