diff --git a/src/bin/proxmox_file_restore/block_driver_qemu.rs b/src/bin/proxmox_file_restore/block_driver_qemu.rs index c95bf80b..24f62796 100644 --- a/src/bin/proxmox_file_restore/block_driver_qemu.rs +++ b/src/bin/proxmox_file_restore/block_driver_qemu.rs @@ -98,6 +98,7 @@ async fn cleanup_map(map: &mut HashMap) -> bool { "VM '{}' (pid: {}, cid: {}) was not reachable, removing from map", name, state.pid, state.cid ); + let _ = super::qemu_helper::try_kill_vm(state.pid); } } @@ -131,6 +132,7 @@ async fn ensure_running(details: &SnapRestoreDetails) -> Result { eprintln!("stale VM detected, restarting ({})", err); // VM is dead, restart + let _ = super::qemu_helper::try_kill_vm(vm.pid); let vms = start_vm(vm.cid, details).await?; new_cid = vms.cid; state.map.insert(name, vms.clone()); diff --git a/src/bin/proxmox_file_restore/qemu_helper.rs b/src/bin/proxmox_file_restore/qemu_helper.rs index 9328addf..f21ab0d8 100644 --- a/src/bin/proxmox_file_restore/qemu_helper.rs +++ b/src/bin/proxmox_file_restore/qemu_helper.rs @@ -56,7 +56,7 @@ fn validate_img_existance() -> Result<(), Error> { Ok(()) } -fn try_kill_vm(pid: i32) -> Result<(), Error> { +pub fn try_kill_vm(pid: i32) -> Result<(), Error> { let pid = Pid::from_raw(pid); if let Ok(()) = kill(pid, None) { // process is running (and we could kill it), check if it is actually ours