From 766e1948a66b70b9d1235f5c990cac1ae0d6ae3f Mon Sep 17 00:00:00 2001 From: Filipi Fuchter Date: Thu, 18 Sep 2025 18:43:33 -0300 Subject: [PATCH] Mentioning the fix in the changelog. --- CHANGELOG.md | 5 +++++ src/pipecat/transports/smallwebrtc/connection.py | 13 ------------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 756f0ca52..ba80609fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fixed a memory leak in `SmallWebRTCTransport`. In `aiortc`, when you receive + a `MediaStreamTrack` (audio or video), frames are produced asynchronously. If + the code never consumes these frames, they are queued in memory, causing a + memory leak. + - Fixed an issue in `AsyncAITTSService`, where `TTSTextFrames` were not being pushed. diff --git a/src/pipecat/transports/smallwebrtc/connection.py b/src/pipecat/transports/smallwebrtc/connection.py index 7a2c91a68..decd8ca58 100644 --- a/src/pipecat/transports/smallwebrtc/connection.py +++ b/src/pipecat/transports/smallwebrtc/connection.py @@ -161,22 +161,9 @@ class SmallWebRTCTrack: async def _idle_watcher(self): """Disable receiving if idle for more than _idle_timeout and monitor queue size.""" - last_warned_queue_size = 0 - while self._receiver._enabled: await asyncio.sleep(self._idle_timeout) idle_duration = time.time() - self._last_recv_time - - if isinstance(self._track, RemoteStreamTrack) and hasattr(self._track, "_queue"): - queue_size = self._track._queue.qsize() - - # Show warning each time queue grows 10 frames beyond last warning - if queue_size >= last_warned_queue_size + 10: - logger.warning( - f"{self._track.kind} track queue size is high: {queue_size} frames" - ) - last_warned_queue_size = queue_size - if idle_duration >= self._idle_timeout: # discard old frames to prevent memory growth logger.debug(