summaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorJohn Snow2022-02-25 21:59:45 +0100
committerJohn Snow2022-03-07 20:36:41 +0100
commit32c5abf051d06ff103d9d30eb6a7f3e8bf582334 (patch)
tree1d7fcf55484a732d7b45d98922d6f82893ab0d04 /python
parentpython/aqmp: refactor _do_accept() into two distinct steps (diff)
downloadqemu-32c5abf051d06ff103d9d30eb6a7f3e8bf582334.tar.gz
qemu-32c5abf051d06ff103d9d30eb6a7f3e8bf582334.tar.xz
qemu-32c5abf051d06ff103d9d30eb6a7f3e8bf582334.zip
python/aqmp: stop the server during disconnect()
Before we allow the full separation of starting the server and accepting new connections, make sure that the disconnect cleans up the server and its new state, too. Signed-off-by: John Snow <jsnow@redhat.com> Acked-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Message-id: 20220225205948.3693480-8-jsnow@redhat.com Signed-off-by: John Snow <jsnow@redhat.com>
Diffstat (limited to 'python')
-rw-r--r--python/qemu/aqmp/protocol.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/python/qemu/aqmp/protocol.py b/python/qemu/aqmp/protocol.py
index e2bdad542d..cdbc9cba0d 100644
--- a/python/qemu/aqmp/protocol.py
+++ b/python/qemu/aqmp/protocol.py
@@ -432,7 +432,7 @@ class AsyncProtocol(Generic[T]):
self._runstate_event.set()
self._runstate_event.clear()
- @bottom_half # However, it does not run from the R/W tasks.
+ @bottom_half
async def _stop_server(self) -> None:
"""
Stop listening for / accepting new incoming connections.
@@ -709,6 +709,7 @@ class AsyncProtocol(Generic[T]):
self._reader = None
self._writer = None
+ self._accepted = None
# NB: _runstate_changed cannot be cleared because we still need it to
# send the final runstate changed event ...!
@@ -732,6 +733,9 @@ class AsyncProtocol(Generic[T]):
def _done(task: Optional['asyncio.Future[Any]']) -> bool:
return task is not None and task.done()
+ # If the server is running, stop it.
+ await self._stop_server()
+
# Are we already in an error pathway? If either of the tasks are
# already done, or if we have no tasks but a reader/writer; we
# must be.