From 8cd4a9668618e6631820a2f5ad1212d588b9b834 Mon Sep 17 00:00:00 2001 From: teknium1 Date: Tue, 17 Mar 2026 04:09:16 -0700 Subject: [PATCH] fix(browser): race condition in session creation can orphan cloud sessions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two concurrent threads (e.g. parallel subagents) could both pass the 'task_id in _active_sessions' check, both create cloud sessions via network calls, and then one would overwrite the other — leaking the first cloud session. Add double-check after the lock is re-acquired: if another thread already created a session while we were doing the network call, use the existing one instead of orphaning it. --- tools/browser_tool.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/browser_tool.py b/tools/browser_tool.py index c396c6e50..9760cf302 100644 --- a/tools/browser_tool.py +++ b/tools/browser_tool.py @@ -555,6 +555,11 @@ def _get_session_info(task_id: Optional[str] = None) -> Dict[str, str]: session_info = provider.create_session(task_id) with _cleanup_lock: + # Double-check: another thread may have created a session while we + # were doing the network call. Use the existing one to avoid leaking + # orphan cloud sessions. + if task_id in _active_sessions: + return _active_sessions[task_id] _active_sessions[task_id] = session_info return session_info