Commit cd87f5e3 authored by Kevin Wolf's avatar Kevin Wolf Committed by Peter Maydell
Browse files

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: default avatarKevin Wolf <kwolf@redhat.com>
Reviewed-by: default avatarJohn Snow <jsnow@redhat.com>
Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20200313083617.8326-3-kwolf@redhat.com
Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parent aa1cbeb8
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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()