mirror of
https://github.com/Alexey71/opera-proxy.git
synced 2026-05-13 22:20:59 +00:00
dialer selection: backport context cancel from parallel resolver
This commit is contained in:
+4
-4
@@ -99,8 +99,8 @@ func probeDialer(ctx context.Context, dialer ContextDialer, url string, dlLimit
|
|||||||
func NewFastestServerSelectionFunc(url string, dlLimit int64, tlsClientConfig *tls.Config) SelectionFunc {
|
func NewFastestServerSelectionFunc(url string, dlLimit int64, tlsClientConfig *tls.Config) SelectionFunc {
|
||||||
return func(ctx context.Context, dialers []ContextDialer) (ContextDialer, error) {
|
return func(ctx context.Context, dialers []ContextDialer) (ContextDialer, error) {
|
||||||
var resErr error
|
var resErr error
|
||||||
masterNotInterested := make(chan struct{})
|
ctx, cl := context.WithCancel(ctx)
|
||||||
defer close(masterNotInterested)
|
defer cl()
|
||||||
errors := make(chan error)
|
errors := make(chan error)
|
||||||
success := make(chan ContextDialer)
|
success := make(chan ContextDialer)
|
||||||
for _, dialer := range dialers {
|
for _, dialer := range dialers {
|
||||||
@@ -109,12 +109,12 @@ func NewFastestServerSelectionFunc(url string, dlLimit int64, tlsClientConfig *t
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
select {
|
select {
|
||||||
case success <- dialer:
|
case success <- dialer:
|
||||||
case <-masterNotInterested:
|
case <-ctx.Done():
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
select {
|
select {
|
||||||
case errors <- err:
|
case errors <- err:
|
||||||
case <-masterNotInterested:
|
case <-ctx.Done():
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}(dialer)
|
}(dialer)
|
||||||
|
|||||||
Reference in New Issue
Block a user