diff --git a/internal/pool/pool.go b/internal/pool/pool.go index bb9b14beb..6f009175c 100644 --- a/internal/pool/pool.go +++ b/internal/pool/pool.go @@ -296,8 +296,18 @@ func (p *ConnPool) waitTurn(ctx context.Context) error { default: } + var realPoolTimeout time.Duration timer := timers.Get().(*time.Timer) - timer.Reset(p.cfg.PoolTimeout) + deadline, ok := ctx.Deadline() + if ok { + realPoolTimeout = time.Until(deadline) + if realPoolTimeout > p.cfg.PoolTimeout { + realPoolTimeout = p.cfg.PoolTimeout + } + } else { + realPoolTimeout = p.cfg.PoolTimeout + } + timer.Reset(realPoolTimeout) select { case <-ctx.Done():