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), }