newConn race fix

This commit is contained in:
Nikolay Vorobev 2023-11-01 16:55:42 +03:00
parent 5aa430d974
commit d8227214bc
1 changed files with 12 additions and 6 deletions

View File

@ -164,6 +164,18 @@ func (p *ConnPool) NewConn(ctx context.Context) (*Conn, error) {
}
func (p *ConnPool) newConn(ctx context.Context, pooled bool) (*Conn, error) {
var poolExhausted bool
p.connsMu.Lock()
if p.cfg.MaxActiveConns > 0 {
poolExhausted = p.poolSize >= p.cfg.MaxActiveConns
}
p.connsMu.Unlock()
if poolExhausted {
return nil, ErrPoolExhausted
}
cn, err := p.dialConn(ctx, pooled)
if err != nil {
return nil, err
@ -178,12 +190,6 @@ func (p *ConnPool) newConn(ctx context.Context, pooled bool) (*Conn, error) {
return nil, ErrClosed
}
// It is not allowed to add new connections to the connection pool.
if p.cfg.MaxActiveConns > 0 && p.poolSize >= p.cfg.MaxActiveConns {
_ = cn.Close()
return nil, ErrPoolExhausted
}
p.conns = append(p.conns, cn)
if pooled {
// If pool is full remove the cn on next Put.