diff --git a/devices/src/virtio/vhost/user/device/handler.rs b/devices/src/virtio/vhost/user/device/handler.rs index 4910678130..90b3638f1e 100644 --- a/devices/src/virtio/vhost/user/device/handler.rs +++ b/devices/src/virtio/vhost/user/device/handler.rs @@ -372,7 +372,6 @@ where mem: Option, backend: Box, ops: O, - shmid: Option, } impl DeviceRequestHandler { @@ -400,7 +399,6 @@ where mem: None, backend, ops, - shmid: None, } } } @@ -648,7 +646,10 @@ impl VhostUserSlaveReqHandlerMut for DeviceRequestHandl } fn set_slave_req_fd(&mut self, ep: Box>) { - let conn = VhostBackendReqConnection::new(Slave::new(ep), self.shmid); + let conn = VhostBackendReqConnection::new( + Slave::new(ep), + self.backend.get_shared_memory_region().map(|r| r.id), + ); self.backend.set_backend_req_connection(conn); } @@ -684,7 +685,6 @@ impl VhostUserSlaveReqHandlerMut for DeviceRequestHandl fn get_shared_memory_regions(&mut self) -> VhostResult> { Ok(if let Some(r) = self.backend.get_shared_memory_region() { - self.shmid = Some(r.id); vec![VhostSharedMemoryRegion::new(r.id, r.length)] } else { Vec::new() diff --git a/devices/src/virtio/vhost/user/device/wl.rs b/devices/src/virtio/vhost/user/device/wl.rs index b0386786c0..471d821224 100644 --- a/devices/src/virtio/vhost/user/device/wl.rs +++ b/devices/src/virtio/vhost/user/device/wl.rs @@ -224,22 +224,22 @@ impl VhostUserBackend for WlBackend { .. } = self; - let mapper = { - match &mut self.backend_req_conn { - VhostBackendReqConnectionState::Connected(request) => { - request.take_shmem_mapper()? - } - VhostBackendReqConnectionState::NoConnection => { - bail!("No backend request connection found") - } - } - }; #[cfg(feature = "minigbm")] let gralloc = RutabagaGralloc::new().context("Failed to initailize gralloc")?; - let wlstate = self - .wlstate - .get_or_insert_with(|| { - Rc::new(RefCell::new(wl::WlState::new( + let wlstate = match &self.wlstate { + None => { + let mapper = { + match &mut self.backend_req_conn { + VhostBackendReqConnectionState::Connected(request) => { + request.take_shmem_mapper()? + } + VhostBackendReqConnectionState::NoConnection => { + bail!("No backend request connection found") + } + } + }; + + let wlstate = Rc::new(RefCell::new(wl::WlState::new( wayland_paths.take().expect("WlState already initialized"), mapper, *use_transition_flags, @@ -248,9 +248,12 @@ impl VhostUserBackend for WlBackend { #[cfg(feature = "minigbm")] gralloc, None, /* address_offset */ - ))) - }) - .clone(); + ))); + self.wlstate = Some(wlstate.clone()); + wlstate + } + Some(state) => state.clone(), + }; let (handle, registration) = AbortHandle::new_pair(); match idx { 0 => {