Skip to content

Commit

Permalink
python/aqmp: stop the server during disconnect()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
jnsnow committed Mar 7, 2022
1 parent 5e9902a commit 32c5abf
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion python/qemu/aqmp/protocol.py
Expand Up @@ -432,7 +432,7 @@ def _set_state(self, state: Runstate) -> None:
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.
Expand Down Expand Up @@ -709,6 +709,7 @@ def _paranoid_task_erase(task: Optional['asyncio.Future[_U]']

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 ...!
Expand All @@ -732,6 +733,9 @@ async def _bh_disconnect(self) -> None:
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.
Expand Down

0 comments on commit 32c5abf

Please sign in to comment.