]> www.average.org Git - loctrkd.git/commitdiff
collector: do not remove clients before all sends
authorEugene Crosser <crosser@average.org>
Tue, 12 Jul 2022 09:55:41 +0000 (11:55 +0200)
committerEugene Crosser <crosser@average.org>
Tue, 12 Jul 2022 09:55:41 +0000 (11:55 +0200)
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()`.

gps303/collector.py

index 36a5f8a8efd9455b047da437ed60fbfe1c9853a3..9d694b0ae4c83180a7a718aa21be5daa4e7fe6f4 100644 (file)
@@ -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)