cosmic-comp/src/backend/kms/session_fd.rs

38 lines
750 B
Rust
Raw Normal View History

2022-02-04 21:14:20 +01:00
use smithay::reexports::nix::unistd::close;
2022-01-25 15:45:15 +01:00
use std::{
fmt,
2022-02-04 21:14:20 +01:00
os::unix::io::{AsRawFd, RawFd},
2022-01-25 15:45:15 +01:00
rc::Rc,
};
#[derive(Clone)]
pub struct SessionFd(Rc<DropFd>);
struct DropFd(RawFd);
impl SessionFd {
pub fn new(fd: RawFd) -> SessionFd {
SessionFd(Rc::new(DropFd(fd)))
}
}
impl fmt::Debug for SessionFd {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Session-provided File Descriptor [{}]", self.0.0)
}
}
impl AsRawFd for SessionFd {
fn as_raw_fd(&self) -> RawFd {
self.0.0
}
}
impl Drop for DropFd {
fn drop(&mut self) {
if let Err(err) = close(self.0) {
2022-02-04 21:14:20 +01:00
slog_scope::warn!("Failed to close file descriptor {}: {}", self.0, err);
2022-01-25 15:45:15 +01:00
}
}
2022-02-04 21:14:20 +01:00
}