forked from clan/clan-core
clan_vm_manager: Fix qmp shutdown command, bad socket error on retried shutdown
This commit is contained in:
parent
ea7b0c8b90
commit
183c1f4235
@ -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:
|
||||
|
@ -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")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user