diff --git a/vmm/src/device_manager.rs b/vmm/src/device_manager.rs index 6f6e45c74..d8c57847a 100644 --- a/vmm/src/device_manager.rs +++ b/vmm/src/device_manager.rs @@ -4977,6 +4977,12 @@ impl BusDevice for DeviceManager { impl Drop for DeviceManager { fn drop(&mut self) { + // Wake up the DeviceManager threads (mainly virtio device workers), + // to avoid deadlock on waiting for paused/parked worker threads. + if let Err(e) = self.resume() { + error!("Error resuming DeviceManager: {:?}", e); + } + for handle in self.virtio_devices.drain(..) { handle.virtio_device.lock().unwrap().shutdown(); }