From a2e3715e01bf5f8ecba3818914365ed28a08f6f4 Mon Sep 17 00:00:00 2001 From: Chao Wu Date: Wed, 28 Dec 2022 20:23:39 +0800 Subject: [PATCH] upcall: remove upcall client when stopping vm In order to avoid resource leak, we need to remove upcall client in vm and vcpu manager when stopping vm. Signed-off-by: Chao Wu --- src/dragonball/src/vm/mod.rs | 7 +++++++ src/dragonball/src/vmm.rs | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/dragonball/src/vm/mod.rs b/src/dragonball/src/vm/mod.rs index 21935faa65..d573080ae8 100644 --- a/src/dragonball/src/vm/mod.rs +++ b/src/dragonball/src/vm/mod.rs @@ -492,6 +492,13 @@ impl Vm { .map_err(StopMicrovmError::DeviceManager) } + /// Remove upcall client when the VM is destoryed. + #[cfg(feature = "dbs-upcall")] + pub fn remove_upcall(&mut self) -> std::result::Result<(), StopMicrovmError> { + self.upcall_client = None; + Ok(()) + } + /// Reset the console into canonical mode. pub fn reset_console(&self) -> std::result::Result<(), DeviceMgrError> { self.device_manager.reset_console() diff --git a/src/dragonball/src/vmm.rs b/src/dragonball/src/vmm.rs index 1cfbfac584..b15e66fef1 100644 --- a/src/dragonball/src/vmm.rs +++ b/src/dragonball/src/vmm.rs @@ -162,6 +162,11 @@ impl Vmm { warn!("failed to remove devices: {:?}", e); } + #[cfg(feature = "dbs-upcall")] + if let Err(e) = vm.remove_upcall() { + warn!("failed to remove upcall: {:?}", e); + } + if let Err(e) = vm.reset_console() { warn!("Cannot set canonical mode for the terminal. {:?}", e); } @@ -174,6 +179,8 @@ impl Vmm { if let Err(e) = mgr.exit_all_vcpus() { warn!("Failed to exit vcpu thread. {:?}", e); } + #[cfg(feature = "dbs-upcall")] + mgr.set_upcall_channel(None); } Err(e) => warn!("Failed to get vcpu manager {:?}", e), }