From 61607990c82c920851e24b1603e901720629ab38 Mon Sep 17 00:00:00 2001 From: QTom Date: Mon, 30 Mar 2026 10:32:59 +0800 Subject: [PATCH] =?UTF-8?q?fix(lifecycle):=20TokenRefreshService=20Stop()?= =?UTF-8?q?=20=E9=98=B2=E9=87=8D=E5=A4=8D=20close?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 使用 sync.Once 包裹 close(stopCh),避免多次调用 Stop() 时 触发 panic: close of closed channel。 --- backend/internal/service/token_refresh_service.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/backend/internal/service/token_refresh_service.go b/backend/internal/service/token_refresh_service.go index eb3e5592..8f949382 100644 --- a/backend/internal/service/token_refresh_service.go +++ b/backend/internal/service/token_refresh_service.go @@ -32,8 +32,9 @@ type TokenRefreshService struct { privacyClientFactory PrivacyClientFactory proxyRepo ProxyRepository - stopCh chan struct{} - wg sync.WaitGroup + stopCh chan struct{} + stopOnce sync.Once + wg sync.WaitGroup } // NewTokenRefreshService 创建token刷新服务 @@ -130,7 +131,9 @@ func (s *TokenRefreshService) Start() { // Stop 停止刷新服务(可安全多次调用) func (s *TokenRefreshService) Stop() { - close(s.stopCh) + s.stopOnce.Do(func() { + close(s.stopCh) + }) s.wg.Wait() slog.Info("token_refresh.service_stopped") }