diff --git a/pkgs/clan-cli/clan_cli/machines/machines.py b/pkgs/clan-cli/clan_cli/machines/machines.py index 34de00f8..f0173f2a 100644 --- a/pkgs/clan-cli/clan_cli/machines/machines.py +++ b/pkgs/clan-cli/clan_cli/machines/machines.py @@ -25,22 +25,18 @@ class VMAttr: # the symlink will be dangling. self._qmp_socket: Path = state_dir / "qmp.sock" self._qga_socket: Path = state_dir / "qga.sock" - self._qmp: QEMUMonitorProtocol | None = None @contextmanager def qmp_ctx(self) -> Generator[QEMUMonitorProtocol, None, None]: - if self._qmp is None: - rpath = self._qmp_socket.resolve() - if not rpath.exists(): - raise ClanError( - f"qmp socket {rpath} does not exist. Is the VM running?" - ) - self._qmp = QEMUMonitorProtocol(str(rpath)) - self._qmp.connect() + rpath = self._qmp_socket.resolve() + if not rpath.exists(): + raise ClanError(f"qmp socket {rpath} does not exist. Is the VM running?") + qmp = QEMUMonitorProtocol(str(rpath)) + qmp.connect() try: - yield self._qmp + yield qmp finally: - self._qmp.close() + qmp.close() class Machine: diff --git a/pkgs/clan-vm-manager/clan_vm_manager/models/use_vms.py b/pkgs/clan-vm-manager/clan_vm_manager/models/use_vms.py index 882927e0..6db2045c 100644 --- a/pkgs/clan-vm-manager/clan_vm_manager/models/use_vms.py +++ b/pkgs/clan-vm-manager/clan_vm_manager/models/use_vms.py @@ -286,12 +286,11 @@ class VM(GObject.Object): try: with self.machine.vm.qmp_ctx() as qmp: qmp.command("system_powerdown") - except (OSError, ClanError): - # log.debug(f"QMP command 'system_powerdown' ignored. Error: {e}") - pass + except (OSError, ClanError) as ex: + log.debug(f"QMP command 'system_powerdown' ignored. Error: {ex}") - # Try 2 times a second - time.sleep(0.5) + # Try 20 times to stop the VM + time.sleep(self.KILL_TIMEOUT / 20) GLib.idle_add(self.emit, "vm_status_changed", self) log.debug(f"VM {self.get_id()} has stopped")