mirror of
https://github.com/qdm12/gluetun.git
synced 2026-05-10 04:30:20 +02:00
hotfix(pmtud/tcp): fix timeout apply per network call, not globally
This commit is contained in:
@@ -59,17 +59,17 @@ func PathMTUDiscover(ctx context.Context, dsts []netip.AddrPort,
|
|||||||
}
|
}
|
||||||
mssResultCh := make(chan mssResult)
|
mssResultCh := make(chan mssResult)
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(ctx, tryTimeout)
|
mssCtx, mssCancel := context.WithTimeout(ctx, tryTimeout)
|
||||||
defer cancel()
|
defer mssCancel()
|
||||||
go func() {
|
go func() {
|
||||||
dst, mss, err := findHighestMSSDestination(ctx, fd, dsts, excludeMark,
|
dst, mss, err := findHighestMSSDestination(mssCtx, fd, dsts, excludeMark,
|
||||||
maxPossibleMTU, tryTimeout, tracker, firewall, logger)
|
maxPossibleMTU, tryTimeout, tracker, firewall, logger)
|
||||||
mssResultCh <- mssResult{dst: dst, mss: mss, err: err}
|
mssResultCh <- mssResult{dst: dst, mss: mss, err: err}
|
||||||
}()
|
}()
|
||||||
var highestMSSDst netip.AddrPort
|
var highestMSSDst netip.AddrPort
|
||||||
select {
|
select {
|
||||||
case err = <-trackerErrCh:
|
case err = <-trackerErrCh:
|
||||||
cancel()
|
mssCancel()
|
||||||
<-mssResultCh
|
<-mssResultCh
|
||||||
return 0, fmt.Errorf("listening for TCP replies: %w", err)
|
return 0, fmt.Errorf("listening for TCP replies: %w", err)
|
||||||
case result := <-mssResultCh:
|
case result := <-mssResultCh:
|
||||||
@@ -88,17 +88,17 @@ func PathMTUDiscover(ctx context.Context, dsts []netip.AddrPort,
|
|||||||
err error
|
err error
|
||||||
}
|
}
|
||||||
resultCh := make(chan pmtudResult)
|
resultCh := make(chan pmtudResult)
|
||||||
ctx, cancel = context.WithCancel(ctx)
|
pmtudCtx, pmtudCancel := context.WithCancel(ctx)
|
||||||
defer cancel()
|
defer pmtudCancel()
|
||||||
go func() {
|
go func() {
|
||||||
mtu, err := pathMTUDiscover(ctx, fd, highestMSSDst, minMTU, maxPossibleMTU,
|
mtu, err := pathMTUDiscover(pmtudCtx, fd, highestMSSDst, minMTU, maxPossibleMTU,
|
||||||
excludeMark, tryTimeout, tracker, firewall, logger)
|
excludeMark, tryTimeout, tracker, firewall, logger)
|
||||||
resultCh <- pmtudResult{mtu: mtu, err: err}
|
resultCh <- pmtudResult{mtu: mtu, err: err}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case err = <-trackerErrCh:
|
case err = <-trackerErrCh:
|
||||||
cancel()
|
pmtudCancel()
|
||||||
<-resultCh
|
<-resultCh
|
||||||
return 0, fmt.Errorf("listening for TCP replies: %w", err)
|
return 0, fmt.Errorf("listening for TCP replies: %w", err)
|
||||||
case result := <-resultCh:
|
case result := <-resultCh:
|
||||||
|
|||||||
Reference in New Issue
Block a user