From 6950959fa5b95cdd4d0c518ff2f7e9ed8d022cc2 Mon Sep 17 00:00:00 2001 From: NanPan <111261006+poijygfdyy@users.noreply.github.com> Date: Wed, 16 Sep 2026 19:37:39 +0800 Subject: [PATCH] fix(lsp): attach reused multi-root client outside state lock --- agent/lsp/manager.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/agent/lsp/manager.py b/agent/lsp/manager.py index ef30a0cc42..60021afab8 100644 --- a/agent/lsp/manager.py +++ b/agent/lsp/manager.py @@ -389,12 +389,15 @@ class LSPService: client = self._clients.get(key) if client is not None and client.is_running: self._last_used[key] = time.time() - eventlog.log_active(srv.server_id, root) - return await self._attach_root(srv, client, root) - spawning = self._spawning.get(key) - owner = spawning is None - if owner: - spawning = self._spawning[key] = asyncio.get_running_loop().create_future() + else: + client = None + spawning = self._spawning.get(key) + owner = spawning is None + if owner: + spawning = self._spawning[key] = asyncio.get_running_loop().create_future() + if client is not None: + eventlog.log_active(srv.server_id, root) + return await self._attach_root(srv, client, root) if not owner: try: client = await spawning