From: Eugene Crosser Date: Tue, 12 Jul 2022 09:55:41 +0000 (+0200) Subject: collector: do not remove clients before all sends X-Git-Tag: 1.01~1 X-Git-Url: http://www.average.org/gitweb/?p=loctrkd.git;a=commitdiff_plain;h=057cce452eb53d5fbe365a66669bd8dec7dfe989 collector: do not remove clients before all sends This hopefully fixes a crash of the collector when an inline-repliable message and subsequent client disconnect are repored from the same return from `poll()`. --- diff --git a/gps303/collector.py b/gps303/collector.py index 36a5f8a..9d694b0 100644 --- a/gps303/collector.py +++ b/gps303/collector.py @@ -254,9 +254,6 @@ def runserver(conf: ConfigParser, handle_hibernate: bool = True) -> None: else: log.debug("Stray event: %s on socket %s", fl, sk) # poll queue consumed, make changes now - for fd in tostop: - poller.unregister(fd) # type: ignore - clients.stop(fd) for zmsg in tosend: zpub.send( Bcast( @@ -269,6 +266,9 @@ def runserver(conf: ConfigParser, handle_hibernate: bool = True) -> None: ) log.debug("Sending to the client: %s", zmsg) clients.response(zmsg) + for fd in tostop: + poller.unregister(fd) # type: ignore + clients.stop(fd) for clntsock, clntaddr in topoll: fd = clients.add(clntsock, clntaddr) poller.register(fd, flags=zmq.POLLIN)