use crate::traits::VirtualMachine;
use super::KvmVm;
use super::virtio::VIRTIO_MMIO_QUEUE_NOTIFY;
impl Drop for KvmVm {
fn drop(&mut self) {
if self.is_running() {
let _ = self.stop();
}
if let Ok(devices) = self.virtio_devices.read() {
for device in devices.iter() {
let _ = self.unregister_irqfd(device.irq_fd, device.irq);
let notify_addr = device.mmio_base + VIRTIO_MMIO_QUEUE_NOTIFY;
let _ = self
.vm_fd
.unregister_ioeventfd(notify_addr, 4, device.notify_fd);
unsafe {
libc::close(device.irq_fd);
libc::close(device.notify_fd);
}
}
}
tracing::debug!("Dropped VM {}", self.id);
}
}