Compare commits

..

2 Commits

Author SHA1 Message Date
mrasong
c97e2f9342
Merge 4991596daea57d78dbc0320a6ac708f7dc288021 into 354091087955f6fcb7216ee03a2397376e4526c4 2023-12-21 13:37:16 +08:00
Remember
3540910879
fix(backoff): close of closed out channel (#3871)
* fix: close of closed channel

* feat: replace Try0 to std
2023-12-21 11:43:42 +08:00

View File

@ -16,10 +16,9 @@ package wait
import ( import (
"math/rand" "math/rand"
"sync"
"time" "time"
"github.com/samber/lo"
"github.com/fatedier/frp/pkg/util/util" "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 { func MergeAndCloseOnAnyStopChannel[T any](upstreams ...<-chan T) <-chan T {
out := make(chan T) out := make(chan T)
closeOnce := sync.Once{}
for _, upstream := range upstreams { for _, upstream := range upstreams {
ch := upstream ch := upstream
go lo.Try0(func() { go func() {
select { select {
case <-ch: case <-ch:
close(out) closeOnce.Do(func() {
close(out)
})
case <-out: case <-out:
} }
}) }()
} }
return out return out
} }