[bitbake-devel][PATCH v2 03/10] asyncrpc: serv: Cancel all clients on server stop
Joshua Watt <[email protected]> Thu, 30 Jul 2026 12:30:56 -0600
| Newsgroups | org.openembedded.lists.bitbake-devel |
|---|---|
| Message-ID | <[email protected]> |
When the server is stopped, all clients should be stopped, otherwise the server will hang waiting for a disconnect. Signed-off-by: Joshua Watt <[email protected]> --- lib/bb/asyncrpc/serv.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/bb/asyncrpc/serv.py b/lib/bb/asyncrpc/serv.py index d3b1c6c35..dd77ed0a4 100644 --- a/lib/bb/asyncrpc/serv.py +++ b/lib/bb/asyncrpc/serv.py @@ -56,7 +56,7 @@ class AsyncServerConnection(object): if not client_protocol: return - (client_proto_name, client_proto_version) = client_protocol.split() + client_proto_name, client_proto_version = client_protocol.split() if client_proto_name != self.proto_name: self.logger.debug("Rejecting invalid protocol %s" % (self.proto_name)) return @@ -123,6 +123,7 @@ class StreamServer(object): self.handler = handler self.logger = logger self.closed = False + self.clients = [] async def handle_stream_client(self, reader, writer): # writer.transport.set_write_buffer_limits(0) @@ -131,10 +132,16 @@ class StreamServer(object): await socket.close() return - await self.handler(socket) + self.clients.append(socket) + try: + await self.handler(socket) + finally: + self.clients.remove(socket) async def stop(self): self.closed = True + for socket in self.clients: + await socket.close() class TCPStreamServer(StreamServer): -- 2.54.0