[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 06/19] python/machine.py: Prohibit multiple shutdown() calls
From: |
Philippe Mathieu-Daudé |
Subject: |
[PULL 06/19] python/machine.py: Prohibit multiple shutdown() calls |
Date: |
Wed, 15 Jul 2020 00:21:19 +0200 |
From: John Snow <jsnow@redhat.com>
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>
---
python/qemu/machine.py | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/python/qemu/machine.py b/python/qemu/machine.py
index 63e40879e2..c28957ee82 100644
--- a/python/qemu/machine.py
+++ b/python/qemu/machine.py
@@ -294,6 +294,13 @@ def _post_launch(self):
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 @@ def launch(self):
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 @@ def _launch(self):
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 @@ def shutdown(self, has_quit=False, hard=False):
"""
Terminate the VM and clean up
"""
+ if not self._launched:
+ return
+
self._early_cleanup()
if self.is_running():
--
2.21.3
- [PULL 00/19] Python patches for 5.1, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 01/19] scripts/performance: Add dissect.py script, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 02/19] python/machine.py: consolidate _post_shutdown(), Philippe Mathieu-Daudé, 2020/07/14
- [PULL 03/19] python/machine.py: Close QMP socket in cleanup, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 04/19] python/machine.py: Add _early_cleanup hook, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 05/19] python/machine.py: Perform early cleanup for wait() calls, too, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 06/19] python/machine.py: Prohibit multiple shutdown() calls,
Philippe Mathieu-Daudé <=
- [PULL 07/19] python/machine.py: Add a configurable timeout to shutdown(), Philippe Mathieu-Daudé, 2020/07/14
- [PULL 08/19] python/machine.py: Make wait() call shutdown(), Philippe Mathieu-Daudé, 2020/07/14
- [PULL 09/19] tests/acceptance: wait() instead of shutdown() where appropriate, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 11/19] python/machine.py: split shutdown into hard and soft flavors, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 10/19] tests/acceptance: Don't test reboot on cubieboard, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 12/19] python/machine.py: re-add sigkill warning suppression, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 13/19] python/machine.py: change default wait timeout to 3 seconds, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 14/19] python/qmp.py: Define common types, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 15/19] iotests.py: use qemu.qmp type aliases, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 16/19] python/qmp.py: re-absorb MonitorResponseError, Philippe Mathieu-Daudé, 2020/07/14