diff options
author | John Snow | 2022-01-11 00:28:46 +0100 |
---|---|---|
committer | John Snow | 2022-01-21 22:01:31 +0100 |
commit | 3b5bf136f5798a4ea2c66875d6337ca3d6b79434 (patch) | |
tree | f50b83a4bd78a02e59a485c81cd531a970e65f7f | |
parent | python/aqmp: add __del__ method to legacy interface (diff) | |
download | qemu-3b5bf136f5798a4ea2c66875d6337ca3d6b79434.tar.gz qemu-3b5bf136f5798a4ea2c66875d6337ca3d6b79434.tar.xz qemu-3b5bf136f5798a4ea2c66875d6337ca3d6b79434.zip |
python/aqmp: handle asyncio.TimeoutError on execute()
This exception can be injected into any await statement. If we are
canceled via timeout, we want to clear the pending execution record on
our way out.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Beraldo Leal <bleal@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
-rw-r--r-- | python/qemu/aqmp/qmp_client.py | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/python/qemu/aqmp/qmp_client.py b/python/qemu/aqmp/qmp_client.py index 8105e29fa8..6a985ffe30 100644 --- a/python/qemu/aqmp/qmp_client.py +++ b/python/qemu/aqmp/qmp_client.py @@ -435,7 +435,11 @@ class QMPClient(AsyncProtocol[Message], Events): msg_id = msg['id'] self._pending[msg_id] = asyncio.Queue(maxsize=1) - await self._outgoing.put(msg) + try: + await self._outgoing.put(msg) + except: + del self._pending[msg_id] + raise return msg_id @@ -452,9 +456,9 @@ class QMPClient(AsyncProtocol[Message], Events): was lost, or some other problem. """ queue = self._pending[msg_id] - result = await queue.get() try: + result = await queue.get() if isinstance(result, ExecInterruptedError): raise result return result |