From 39eed22e98704f20968e1d3ed42d79e15be1059f Mon Sep 17 00:00:00 2001 From: Para Dox Date: Sun, 1 Jun 2025 17:51:33 +0700 Subject: [PATCH] fix the issue --- benchmark-proxy/main.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/benchmark-proxy/main.go b/benchmark-proxy/main.go index f38e0d68..64fc7d73 100644 --- a/benchmark-proxy/main.go +++ b/benchmark-proxy/main.go @@ -2577,8 +2577,9 @@ func handleRequest(w http.ResponseWriter, r *http.Request, backends []Backend, c // Track if we've already sent a response var responseHandled atomic.Bool var firstBackendStartTime atomic.Pointer[time.Time] - primaryResponseChan := make(chan struct{}, 1) // Signal when primary gets a response - primaryFailedFast := make(chan struct{}, 1) // Signal when primary fails immediately + primaryResponseChan := make(chan struct{}) // Signal when primary gets a response - NO BUFFER for broadcast + var primaryResponseOnce sync.Once // Ensure channel is closed only once + primaryFailedFast := make(chan struct{}, 1) // Signal when primary fails immediately for _, backend := range backends { // Method routing checks for secondary backends @@ -2779,11 +2780,10 @@ func handleRequest(w http.ResponseWriter, r *http.Request, backends []Backend, c // Signal primary response immediately for secondary backends to check if b.Role == "primary" && resp.StatusCode < 400 { - select { - case primaryResponseChan <- struct{}{}: - default: - // Channel already has a signal - } + // Close the channel to broadcast to ALL secondary backends + primaryResponseOnce.Do(func() { + close(primaryResponseChan) + }) } statsChan <- ResponseStats{