From fd85e4ea56002faded91bbdec70bc9db34f176e4 Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Mon, 28 Jul 2025 17:18:11 +0200 Subject: [PATCH] kms: Don't incorrectly re-use iterator in `update_surface_nodes` --- src/backend/kms/device.rs | 7 +++++-- src/backend/kms/mod.rs | 14 ++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/backend/kms/device.rs b/src/backend/kms/device.rs index 2cc043c3..92a27e53 100644 --- a/src/backend/kms/device.rs +++ b/src/backend/kms/device.rs @@ -872,7 +872,7 @@ impl InnerDevice { pub fn update_surface_nodes<'b>( &mut self, used_devices: &HashSet, - mut others: impl Iterator, + others: &[&'b mut Self], ) -> Result<()> where Self: 'b, @@ -891,7 +891,10 @@ impl InnerDevice { self.gbm.clone(), ) } else { - let device = others.find(|d| d.render_node == *new_device).unwrap(); + let device = others + .iter() + .find(|d| d.render_node == *new_device) + .unwrap(); ( device.render_node, device.egl.as_ref().unwrap(), diff --git a/src/backend/kms/mod.rs b/src/backend/kms/mod.rs index 6a07fdec..47bd40c2 100644 --- a/src/backend/kms/mod.rs +++ b/src/backend/kms/mod.rs @@ -571,10 +571,9 @@ impl KmsState { let (mut device, others) = self .drm_devices .values_mut() - .partition::, _>(|d| d.inner.render_node == node); - device[0] - .inner - .update_surface_nodes(&used_devices, others.iter().map(|device| &device.inner))?; + .map(|d| &mut d.inner) + .partition::, _>(|d| d.render_node == node); + device[0].update_surface_nodes(&used_devices, &others)?; } Ok(()) @@ -634,10 +633,9 @@ impl<'a> KmsGuard<'a> { let (mut device, others) = self .drm_devices .values_mut() - .partition::, _>(|d| d.inner.render_node == node); - device[0] - .inner - .update_surface_nodes(&used_devices, others.iter().map(|device| &*device.inner))?; + .map(|d| &mut *d.inner) + .partition::, _>(|d| d.render_node == node); + device[0].update_surface_nodes(&used_devices, &others)?; } Ok(())