summaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorKevin Wolf2020-03-13 09:36:16 +0100
committerPeter Maydell2020-03-21 23:37:32 +0100
commitcd87f5e3783a16ea5ae631855d7bb89116adf0c3 (patch)
tree61431af1907e803ac265c64377a929b1e80f6206 /python
parentiotests.py: Enable faulthandler (diff)
downloadqemu-cd87f5e3783a16ea5ae631855d7bb89116adf0c3.tar.gz
qemu-cd87f5e3783a16ea5ae631855d7bb89116adf0c3.tar.xz
qemu-cd87f5e3783a16ea5ae631855d7bb89116adf0c3.zip
python/qemu: Kill QEMU process if 'quit' doesn't work
With a QEMU bug, it can happen that the QEMU process doesn't react to a 'quit' QMP command. If we got an exception during previous QMP communication (e.g. iotests Timeout expiring), we could also be in an inconsistent state where after sending 'quit' we immediately read an old response and close the socket even though the 'quit' command wasn't processed yet. Both cases would lead to a hanging test. Fix this by waiting for the QEMU process to exit after sending 'quit' with a timeout, and if it doesn't happen within three seconds, send SIGKILL. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-id: 20200313083617.8326-3-kwolf@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'python')
-rw-r--r--python/qemu/machine.py1
1 files changed, 1 insertions, 0 deletions
diff --git a/python/qemu/machine.py b/python/qemu/machine.py
index f53abfa492..b9a98e2c86 100644
--- a/python/qemu/machine.py
+++ b/python/qemu/machine.py
@@ -359,6 +359,7 @@ class QEMUMachine(object):
if not has_quit:
self._qmp.cmd('quit')
self._qmp.close()
+ self._popen.wait(timeout=3)
except:
self._popen.kill()
self._popen.wait()