From: John Snow Date: Fri, 25 Feb 2022 15:59:45 -0500 Subject: python/aqmp: stop the server during disconnect() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Git-commit: 32c5abf051d06ff103d9d30eb6a7f3e8bf582334 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 Acked-by: Kevin Wolf Reviewed-by: Daniel P. Berrangé Message-id: 20220225205948.3693480-8-jsnow@redhat.com Signed-off-by: John Snow Signed-off-by: Li Zhang --- python/qemu/aqmp/protocol.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/python/qemu/aqmp/protocol.py b/python/qemu/aqmp/protocol.py index e2bdad542dc0ef451dd200a1d679..cdbc9cba0d15dea19cc1c60ca3c3 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.