func()

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()
	}
}