diff options
author | Alyssa Ross <hi@alyssa.is> | 2020-03-08 22:41:30 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2020-06-15 09:36:14 +0000 |
commit | 2507cc57bc0145eb57305e60f6a7c21f3b4c9192 (patch) | |
tree | a6b700b920b6b2733ae8049302c613d3eb93a330 /src | |
parent | 3d1bc2e0bb5bae7f32a9fa18b5348295facd5ab6 (diff) | |
download | crosvm-2507cc57bc0145eb57305e60f6a7c21f3b4c9192.tar crosvm-2507cc57bc0145eb57305e60f6a7c21f3b4c9192.tar.gz crosvm-2507cc57bc0145eb57305e60f6a7c21f3b4c9192.tar.bz2 crosvm-2507cc57bc0145eb57305e60f6a7c21f3b4c9192.tar.lz crosvm-2507cc57bc0145eb57305e60f6a7c21f3b4c9192.tar.xz crosvm-2507cc57bc0145eb57305e60f6a7c21f3b4c9192.tar.zst crosvm-2507cc57bc0145eb57305e60f6a7c21f3b4c9192.zip |
vm_control: make MaybeOwnedFd generic
This will allow more easily sending types other than File over sockets, (e.g., UnixSeqpacket).
Diffstat (limited to 'src')
-rw-r--r-- | src/wl.rs | 53 |
1 files changed, 12 insertions, 41 deletions
diff --git a/src/wl.rs b/src/wl.rs index 419fb67..b35af8b 100644 --- a/src/wl.rs +++ b/src/wl.rs @@ -1,15 +1,10 @@ // SPDX-License-Identifier: BSD-3-Clause -use std::os::unix::prelude::*; - use devices::virtio::{InterruptProxy, InterruptProxyEvent, SingleFd, Worker}; use msg_socket::{MsgReceiver, MsgSocket}; use std::collections::BTreeMap; use std::fs::remove_file; -use sys_util::{ - net::{UnixSeqpacket, UnixSeqpacketListener}, - EventFd, GuestMemory, SharedMemory, -}; +use sys_util::{net::UnixSeqpacketListener, GuestMemory}; use vm_control::VmMemoryControlRequestSocket; #[cfg(any(target_arch = "arm", target_arch = "aarch64"))] @@ -36,7 +31,7 @@ fn main() { loop { match msg_socket.recv() { Ok(SingleFd { - memfd, + shm, interrupt, interrupt_resample_evt, in_queue, @@ -47,8 +42,7 @@ fn main() { out_queue_evt, kill_evt, }) => { - let shm = unsafe { SharedMemory::from_raw_fd(memfd.as_raw_fd()) }; - std::mem::forget(memfd); + let shm = shm.owned(); let regions = arch_memory_regions(MemoryParams { size: shm.size(), @@ -57,27 +51,19 @@ fn main() { let mem = GuestMemory::with_memfd(®ions, shm).expect("GuestMemory::with_memfd failed"); - let interrupt: MsgSocket<InterruptProxyEvent, ()> = MsgSocket::new(unsafe { - let sock = UnixSeqpacket::from_raw_fd(interrupt.as_raw_fd()); - std::mem::forget(interrupt); - sock - }); - let vm_socket: VmMemoryControlRequestSocket = MsgSocket::new(unsafe { - let sock = UnixSeqpacket::from_raw_fd(vm_socket.as_raw_fd()); - std::mem::forget(vm_socket); - sock - }); + let interrupt: MsgSocket<InterruptProxyEvent, ()> = + MsgSocket::new(interrupt.owned()); + let vm_socket: VmMemoryControlRequestSocket = MsgSocket::new(vm_socket.owned()); let mut wayland_paths = BTreeMap::new(); wayland_paths.insert("".into(), "/run/user/1000/wayland-0".into()); let mut worker = Worker::new( mem, - Box::new(InterruptProxy::new(interrupt, unsafe { - let evt = EventFd::from_raw_fd(interrupt_resample_evt.as_raw_fd()); - std::mem::forget(interrupt_resample_evt); - evt - })), + Box::new(InterruptProxy::new( + interrupt, + interrupt_resample_evt.owned(), + )), in_queue, out_queue, wayland_paths, @@ -87,23 +73,8 @@ fn main() { ); worker.run( - vec![ - unsafe { - let evt = EventFd::from_raw_fd(in_queue_evt.as_raw_fd()); - std::mem::forget(in_queue_evt); - evt - }, - unsafe { - let evt = EventFd::from_raw_fd(out_queue_evt.as_raw_fd()); - std::mem::forget(out_queue_evt); - evt - }, - ], - unsafe { - let evt = EventFd::from_raw_fd(kill_evt.as_raw_fd()); - std::mem::forget(kill_evt); - evt - }, + vec![in_queue_evt.owned(), out_queue_evt.owned()], + kill_evt.owned(), ); } |