aboutsummaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/qemu/machine/machine.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/python/qemu/machine/machine.py b/python/qemu/machine/machine.py
index 37191f433b..6f1374a755 100644
--- a/python/qemu/machine/machine.py
+++ b/python/qemu/machine/machine.py
@@ -373,6 +373,7 @@ class QEMUMachine:
Called to cleanup the VM instance after the process has exited.
May also be called after a failed launch.
"""
+ LOG.debug("Cleaning up after VM process")
try:
self._close_qmp_connection()
except Exception as err: # pylint: disable=broad-except
@@ -497,6 +498,7 @@ class QEMUMachine:
# for QEMU to exit, while QEMU is waiting for the socket to
# become writable.
if self._console_socket is not None:
+ LOG.debug("Closing console socket")
self._console_socket.close()
self._console_socket = None
@@ -507,6 +509,7 @@ class QEMUMachine:
:raise subprocess.Timeout: When timeout is exceeds 60 seconds
waiting for the QEMU process to terminate.
"""
+ LOG.debug("Performing hard shutdown")
self._early_cleanup()
self._subp.kill()
self._subp.wait(timeout=60)
@@ -523,8 +526,18 @@ class QEMUMachine:
:raise subprocess.TimeoutExpired: When timeout is exceeded waiting for
the QEMU process to terminate.
"""
+ LOG.debug("Attempting graceful termination")
+
self._early_cleanup()
+ if self._quit_issued:
+ LOG.debug(
+ "Anticipating QEMU termination due to prior 'quit' command, "
+ "or explicit call to wait()"
+ )
+ else:
+ LOG.debug("Politely asking QEMU to terminate")
+
if self._qmp_connection:
try:
if not self._quit_issued:
@@ -536,6 +549,10 @@ class QEMUMachine:
self._close_qmp_connection()
# May raise subprocess.TimeoutExpired
+ LOG.debug(
+ "Waiting (timeout=%s) for QEMU process (pid=%s) to terminate",
+ timeout, self._subp.pid
+ )
self._subp.wait(timeout=timeout)
def _do_shutdown(self, timeout: Optional[int]) -> None:
@@ -553,6 +570,10 @@ class QEMUMachine:
try:
self._soft_shutdown(timeout)
except Exception as exc:
+ if isinstance(exc, subprocess.TimeoutExpired):
+ LOG.debug("Timed out waiting for QEMU process to exit")
+ LOG.debug("Graceful shutdown failed", exc_info=True)
+ LOG.debug("Falling back to hard shutdown")
self._hard_shutdown()
raise AbnormalShutdown("Could not perform graceful shutdown") \
from exc
@@ -575,6 +596,10 @@ class QEMUMachine:
if not self._launched:
return
+ LOG.debug("Shutting down VM appliance; timeout=%s", timeout)
+ if hard:
+ LOG.debug("Caller requests immediate termination of QEMU process.")
+
try:
if hard:
self._user_killed = True