diff options
Diffstat (limited to 'vm_control')
-rw-r--r-- | vm_control/Cargo.toml | 1 | ||||
-rw-r--r-- | vm_control/src/lib.rs | 16 |
2 files changed, 11 insertions, 6 deletions
diff --git a/vm_control/Cargo.toml b/vm_control/Cargo.toml index 3a6ec3f..8bde359 100644 --- a/vm_control/Cargo.toml +++ b/vm_control/Cargo.toml @@ -10,6 +10,5 @@ kvm = { path = "../kvm" } libc = "*" msg_socket = { path = "../msg_socket" } msg_socket2 = { path = "../msg_socket2" } -msg_socket2_derive = { path = "../msg_socket2/derive" } resources = { path = "../resources" } sys_util = { path = "../sys_util" } diff --git a/vm_control/src/lib.rs b/vm_control/src/lib.rs index 3ec6be7..99fae7e 100644 --- a/vm_control/src/lib.rs +++ b/vm_control/src/lib.rs @@ -20,22 +20,22 @@ use libc::{EINVAL, EIO, ENODEV}; use kvm::{IrqRoute, IrqSource, Vm}; use msg_socket::{MsgError, MsgOnSocket, MsgResult, MsgSocket, UnixSeqpacketExt}; -use msg_socket2_derive::SerializeWithFds; +use msg_socket2::{DeserializeWithFds, SerializeWithFds}; use resources::{Alloc, GpuMemoryDesc, MmioType, SystemAllocator}; use sys_util::net::UnixSeqpacket; use sys_util::{error, Error as SysError, EventFd, GuestAddress, MemoryMapping, MmapError, Result}; /// A data structure that either owns or borrows a file descriptor. -#[derive(SerializeWithFds, Debug)] +#[derive(Debug, DeserializeWithFds, SerializeWithFds)] #[msg_socket2(strategy = "AsRawFd")] -pub enum MaybeOwnedFd<Owned: AsRawFd> { +pub enum MaybeOwnedFd<Owned: AsRawFd + FromRawFd> { /// Owned by this enum variant, and will be destructed automatically if not moved out. Owned(Owned), /// A file descriptor borrwed by this enum. Borrowed(RawFd), } -impl<Owned: AsRawFd> MaybeOwnedFd<Owned> { +impl<Owned: AsRawFd + FromRawFd> MaybeOwnedFd<Owned> { pub fn new_borrowed(fd: &dyn AsRawFd) -> Self { Self::Borrowed(fd.as_raw_fd()) } @@ -48,7 +48,7 @@ impl<Owned: AsRawFd> MaybeOwnedFd<Owned> { } } -impl<Owned: AsRawFd> AsRawFd for MaybeOwnedFd<Owned> { +impl<Owned: AsRawFd + FromRawFd> AsRawFd for MaybeOwnedFd<Owned> { fn as_raw_fd(&self) -> RawFd { match self { MaybeOwnedFd::Owned(f) => f.as_raw_fd(), @@ -57,6 +57,12 @@ impl<Owned: AsRawFd> AsRawFd for MaybeOwnedFd<Owned> { } } +impl<Owned: AsRawFd + FromRawFd> FromRawFd for MaybeOwnedFd<Owned> { + unsafe fn from_raw_fd(fd: RawFd) -> Self { + Self::Owned(Owned::from_raw_fd(fd)) + } +} + // When sent, it could be owned or borrowed. On the receiver end, it always owned. impl<Owned: AsRawFd + FromRawFd + MsgOnSocket> MsgOnSocket for MaybeOwnedFd<Owned> { fn uses_fd() -> bool { |