in gdbclient/internal/pool/pool.go [126:153]
func (p *ConnPool) newConn() {
defer atomic.AddInt32(&p._opening, -1)
if atomic.AddInt32(&p._opening, 1) > int32(p.poolSize) {
return
}
cn, err := p.dialConn()
if err != nil {
internal.Logger.Error("dialer connect", zap.Time("time", time.Now()), zap.Error(err))
return
}
p.connsMu.Lock()
if !p.closed() && len(p.conns) <= p.poolSize {
cn.setNotifier(p.poolNotifier)
cn.setReleaseConn(p.Put)
p.conns = append([]*ConnWebSocket{cn}, p.conns...)
cn = nil
}
p.connsMu.Unlock()
if cn != nil {
internal.Logger.Debug("release conn as pool full", zap.Time("time", time.Now()), zap.Stringer("con", cn))
cn.Close()
} else {
p.announceAvailableConn()
}
}