diff --git a/yaqd-core/CHANGELOG.md b/yaqd-core/CHANGELOG.md index 07acfb5..ea5dabb 100644 --- a/yaqd-core/CHANGELOG.md +++ b/yaqd-core/CHANGELOG.md @@ -5,6 +5,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/). ## [Unreleased] +## [2023.11.0] + +### Fixed +- Fixed memory leak in daemon server that scaled with number of connections + ## [2023.6.0] ### Added @@ -337,7 +342,8 @@ There are no actual code changes, this release is to update the release pipeline - Generic Client - Continuous hardware base daemon -[Unreleased]: https://github.com/yaq-project/yaq-python/compare/yaqd-core-2023.6.0...main +[Unreleased]: https://github.com/yaq-project/yaq-python/compare/yaqd-core-2023.11.0...main +[2023.11.0]: https://github.com/yaq-project/yaq-python/compare/yaqd-core-2023.6.0..2023.11.0 [2023.6.0]: https://github.com/yaq-project/yaq-python/compare/yaqd-core-2023.2.0...2023.6.0 [2023.2.0]: https://github.com/yaq-project/yaq-python/compare/yaqd-core-2022.8.0...2023.2.0 [2022.8.0]: https://github.com/yaq-project/yaq-python/compare/yaqd-core-2022.7.0...2022.8.0 diff --git a/yaqd-core/yaqd_core/__version__.py b/yaqd-core/yaqd_core/__version__.py index 0e2974a..f6c2624 100644 --- a/yaqd-core/yaqd_core/__version__.py +++ b/yaqd-core/yaqd_core/__version__.py @@ -11,7 +11,7 @@ __avro_version__ = "1.9.2" -__version__ = "2023.6.0" +__version__ = "2023.11.0" try: __branch__ = ( diff --git a/yaqd-core/yaqd_core/_protocol.py b/yaqd-core/yaqd_core/_protocol.py index 311eec5..6644a08 100644 --- a/yaqd-core/yaqd_core/_protocol.py +++ b/yaqd-core/yaqd_core/_protocol.py @@ -18,6 +18,7 @@ def __init__(self, daemon, *args, **kwargs): def connection_lost(self, exc): peername = self.transport.get_extra_info("peername") self.logger.info(f"Connection lost from {peername} to {self._daemon.name}") + self.task.cancel() self._daemon._connection_lost(peername) def connection_made(self, transport): @@ -27,8 +28,7 @@ def connection_made(self, transport): self.transport = transport self.unpacker = avrorpc.Unpacker(self._avro_protocol) self._daemon._connection_made(peername) - task = asyncio.get_event_loop().create_task(self.process_requests()) - self._daemon._tasks.append(task) + self.task = asyncio.get_event_loop().create_task(self.process_requests()) def data_received(self, data): """Process an incomming request."""