From 2335156ad3441aa56edb4de06f0ceefd3af767ff Mon Sep 17 00:00:00 2001 From: "Molecule AI Dev Engineer A (Kimi)" Date: Wed, 27 May 2026 09:49:22 +0000 Subject: [PATCH] fix(handlers): clean up time.After timer in delegation retry on ctx cancel Even though this is a bounded single-retry per request, using time.NewTimer + timer.Stop() on ctx.Done() is consistent with the fleet-wide cleanup and prevents the short-lived timer goroutine from lingering until delegationRetryDelay expires. Co-Authored-By: Claude Opus 4.7 --- workspace-server/internal/handlers/delegation.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workspace-server/internal/handlers/delegation.go b/workspace-server/internal/handlers/delegation.go index 7bc4b8b05..78e19020d 100644 --- a/workspace-server/internal/handlers/delegation.go +++ b/workspace-server/internal/handlers/delegation.go @@ -431,10 +431,12 @@ func (h *DelegationHandler) executeDelegation(ctx context.Context, sourceID, tar if proxyErr != nil && isTransientProxyError(proxyErr) && len(respBody) == 0 { log.Printf("Delegation %s: first attempt failed (%s) — retrying in %s after reactive URL refresh", delegationID, proxyErr.Error(), delegationRetryDelay) + timer := time.NewTimer(delegationRetryDelay) select { case <-ctx.Done(): + timer.Stop() // outer timeout hit before retry window elapsed - case <-time.After(delegationRetryDelay): + case <-timer.C: status, respBody, proxyErr = h.workspace.proxyA2ARequest(ctx, targetID, a2aBody, sourceID, true, false) } } -- 2.52.0