func (p *Peer) GetConnection(ctx context.Context) (*Connection, error) {
	if activeConn, ok := p.getActiveConn(); ok {
		return activeConn, nil
	}

	// Lock here to restrict new connection creation attempts to one goroutine
	p.newConnLock.Lock()
	defer p.newConnLock.Unlock()

	// Check active connections again in case someone else got ahead of us.
	if activeConn, ok := p.getActiveConn(); ok {
		return activeConn, nil
	}

	// No active connections, make a new outgoing connection.
	return p.Connect(ctx)
}
func (p *Peer) GetConnection(ctx context.Context) (*Connection, error) {
	if activeConn, ok := p.getActiveConn(); ok {
		return activeConn, nil
	}

	
	p.newConnLock.Lock()
	defer p.newConnLock.Unlock()

	
	if activeConn, ok := p.getActiveConn(); ok {
		return activeConn, nil
	}

	
	return p.Connect(ctx)
}
func ( p * Peer ) GetConnection ( ctx context . Context ) ( * Connection , error ) { if activeConn , ok := p . getActiveConn ( ) ; ok { return activeConn , nil } // Lock here to restrict new connection creation attempts to one goroutine p . newConnLock . Lock ( ) defer p . newConnLock . Unlock ( ) // Check active connections again in case someone else got ahead of us. if activeConn , ok := p . getActiveConn ( ) ; ok { return activeConn , nil } // No active connections, make a new outgoing connection. return p . Connect ( ctx ) }
// GetConnection returns an active connection to this peer. If no active connections
// are found, it will create a new outbound connection and return it.
GetConnection returns an active connection to this peer . If no active connections are found it will create a new outbound connection and return it .