summary refs log tree commit diff
path: root/devices/src/virtio/wl.rs
diff options
context:
space:
mode:
Diffstat (limited to 'devices/src/virtio/wl.rs')
-rw-r--r--devices/src/virtio/wl.rs15
1 files changed, 9 insertions, 6 deletions
diff --git a/devices/src/virtio/wl.rs b/devices/src/virtio/wl.rs
index 0b973bd..7b9ffc8 100644
--- a/devices/src/virtio/wl.rs
+++ b/devices/src/virtio/wl.rs
@@ -56,6 +56,7 @@ use libc::{dup, EBADF, EINVAL};
 use data_model::VolatileMemoryError;
 use data_model::*;
 
+use msg_socket::{MsgError, MsgReceiver, MsgSender, MsgSocket};
 use resources::GpuMemoryDesc;
 use sys_util::{
     pipe, round_up_to_page_size, Error, EventFd, FileFlags, GuestAddress, GuestMemory,
@@ -66,7 +67,7 @@ use sys_util::{
 use sys_util::ioctl_with_ref;
 
 use super::{DescriptorChain, Queue, VirtioDevice, INTERRUPT_STATUS_USED_RING, TYPE_WL};
-use vm_control::{MaybeOwnedFd, VmControlError, VmRequest, VmResponse};
+use vm_control::{MaybeOwnedFd, VmRequest, VmResponse};
 
 const VIRTWL_SEND_MAX_ALLOCS: usize = 28;
 const VIRTIO_WL_CMD_VFD_NEW: u32 = 256;
@@ -409,7 +410,7 @@ enum WlError {
     AllocSetSize(Error),
     SocketConnect(io::Error),
     SocketNonBlock(io::Error),
-    VmControl(VmControlError),
+    VmControl(MsgError),
     VmBadResponse,
     CheckedOffset,
     GuestMemory(GuestMemoryError),
@@ -467,21 +468,23 @@ impl From<VolatileMemoryError> for WlError {
 
 #[derive(Clone)]
 struct VmRequester {
-    inner: Rc<RefCell<UnixDatagram>>,
+    inner: Rc<RefCell<MsgSocket<VmRequest, VmResponse>>>,
 }
 
 impl VmRequester {
     fn new(vm_socket: UnixDatagram) -> VmRequester {
         VmRequester {
-            inner: Rc::new(RefCell::new(vm_socket)),
+            inner: Rc::new(RefCell::new(MsgSocket::<VmRequest, VmResponse>::new(
+                vm_socket,
+            ))),
         }
     }
 
     fn request(&self, request: VmRequest) -> WlResult<VmResponse> {
         let mut inner = self.inner.borrow_mut();
         let ref mut vm_socket = *inner;
-        request.send(vm_socket).map_err(WlError::VmControl)?;
-        VmResponse::recv(vm_socket).map_err(WlError::VmControl)
+        vm_socket.send(&request).map_err(WlError::VmControl)?;
+        vm_socket.recv().map_err(WlError::VmControl)
     }
 }