Explorar o código

fix(backoff): close of closed out channel (#3871)

* fix: close of closed channel

* feat: replace Try0 to std
Remember hai 1 ano
pai
achega
3540910879
Modificáronse 1 ficheiros con 7 adicións e 6 borrados
  1. 7 6
      pkg/util/wait/backoff.go

+ 7 - 6
pkg/util/wait/backoff.go

@@ -16,10 +16,9 @@ package wait
 
 import (
 	"math/rand"
+	"sync"
 	"time"
 
-	"github.com/samber/lo"
-
 	"github.com/fatedier/frp/pkg/util/util"
 )
 
@@ -182,16 +181,18 @@ func Until(f func(), period time.Duration, stopCh <-chan struct{}) {
 
 func MergeAndCloseOnAnyStopChannel[T any](upstreams ...<-chan T) <-chan T {
 	out := make(chan T)
-
+	closeOnce := sync.Once{}
 	for _, upstream := range upstreams {
 		ch := upstream
-		go lo.Try0(func() {
+		go func() {
 			select {
 			case <-ch:
-				close(out)
+				closeOnce.Do(func() {
+					close(out)
+				})
 			case <-out:
 			}
-		})
+		}()
 	}
 	return out
 }