mirror of
https://github.com/qemu/qemu.git
synced 2024-11-26 12:23:36 +08:00
python/machine.py: Prohibit multiple shutdown() calls
If the VM is not launched, don't try to shut it down. As a change, _post_shutdown now unconditionally also calls _early_cleanup in order to offer comprehensive object cleanup in failure cases. As a courtesy, treat it as a NOP instead of rejecting it as an error. This is slightly nicer for acceptance tests where vm.shutdown() is issued unconditionally in tearDown callbacks. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-Id: <20200710050649.32434-6-jsnow@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
This commit is contained in:
parent
3a7d64b6fc
commit
a3842cb078
@ -294,6 +294,13 @@ class QEMUMachine:
|
||||
self._qmp.accept()
|
||||
|
||||
def _post_shutdown(self):
|
||||
"""
|
||||
Called to cleanup the VM instance after the process has exited.
|
||||
May also be called after a failed launch.
|
||||
"""
|
||||
# Comprehensive reset for the failed launch case:
|
||||
self._early_cleanup()
|
||||
|
||||
if self._qmp:
|
||||
self._qmp.close()
|
||||
self._qmp = None
|
||||
@ -339,7 +346,7 @@ class QEMUMachine:
|
||||
self._launch()
|
||||
self._launched = True
|
||||
except:
|
||||
self.shutdown()
|
||||
self._post_shutdown()
|
||||
|
||||
LOG.debug('Error launching VM')
|
||||
if self._qemu_full_args:
|
||||
@ -368,6 +375,8 @@ class QEMUMachine:
|
||||
def _early_cleanup(self) -> None:
|
||||
"""
|
||||
Perform any cleanup that needs to happen before the VM exits.
|
||||
|
||||
Called additionally by _post_shutdown for comprehensive cleanup.
|
||||
"""
|
||||
# If we keep the console socket open, we may deadlock waiting
|
||||
# for QEMU to exit, while QEMU is waiting for the socket to
|
||||
@ -388,6 +397,9 @@ class QEMUMachine:
|
||||
"""
|
||||
Terminate the VM and clean up
|
||||
"""
|
||||
if not self._launched:
|
||||
return
|
||||
|
||||
self._early_cleanup()
|
||||
|
||||
if self.is_running():
|
||||
|
Loading…
Reference in New Issue
Block a user