From c939e2d5b6839be0effc2ca77fc085b80bb83956 Mon Sep 17 00:00:00 2001 From: Henri Date: Thu, 16 Apr 2026 09:34:50 +0200 Subject: [PATCH] Squash ENODEV in Device::Drop --- src/sync_stream.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/sync_stream.rs b/src/sync_stream.rs index c9d1609..d7adc72 100644 --- a/src/sync_stream.rs +++ b/src/sync_stream.rs @@ -8,6 +8,7 @@ use crate::{ InputId, KeyCode, }; +use libc::ENODEV; use nix::fcntl; use std::fs::File; use std::os::fd::{AsFd, AsRawFd, BorrowedFd, OwnedFd, RawFd}; @@ -418,7 +419,16 @@ impl Device { impl Drop for Device { fn drop(&mut self) { if let Err(error) = self.ungrab() { - eprintln!("Failed to ungrab device: {error}"); + // Ignore when the device has already been closed + // by some external event like device disconnect. + let enodev = error + .raw_os_error() + .map(|errno| errno == ENODEV) + .unwrap_or_default(); + + if !enodev { + eprintln!("Failed to ungrab device: {error}"); + } } } }