fix: server memory grows with every chat until a restart

Every chat that got a reply left a small lock behind in the server process, so a long-running server kept one for every chat it had ever answered and only a restart gave the memory back. The lock is now dropped as soon as nothing is using it, so a finished reply leaves nothing behind per chat, while replies, sub-agent results and timers for the same chat still wait for each other as before.

Fixes #31521
This commit is contained in:
Classic298 2026-09-28 09:50:22 +02:00
parent 176d31d1db
commit d1789c889b

View file

@ -3,6 +3,7 @@ from __future__ import annotations
import asyncio
import copy
import time
import weakref
from datetime import timedelta
from uuid import uuid4
@ -41,7 +42,7 @@ MUTATING_MEMORY_TOOLS = {
_background_active: set[str] = set()
_background_lock = asyncio.Lock()
_foreground_semaphore: asyncio.Semaphore | None = None
_parent_locks: dict[str, asyncio.Lock] = {}
_parent_locks: weakref.WeakValueDictionary[str, asyncio.Lock] = weakref.WeakValueDictionary()
def _build_request(source: Request, user_id: str, *, internal: bool) -> Request: