server: Peers method now grabs data directly with read mutex
This commit modifies the Peers method on the server such that a caller is able to query this method without the main serger goroutines started. This is a small component in a larger change which will let us start the RPC server independently of the server.
This commit is contained in:
parent
593ba7c8f0
commit
fb4121ba6c
34
server.go
34
server.go
@ -989,12 +989,6 @@ type disconnectPeerMsg struct {
|
|||||||
err chan error
|
err chan error
|
||||||
}
|
}
|
||||||
|
|
||||||
// listPeersMsg is a message sent to the server in order to obtain a listing
|
|
||||||
// of all currently active channels.
|
|
||||||
type listPeersMsg struct {
|
|
||||||
resp chan []*peer
|
|
||||||
}
|
|
||||||
|
|
||||||
// openChanReq is a message sent to the server in order to request the
|
// openChanReq is a message sent to the server in order to request the
|
||||||
// initiation of a channel funding workflow to the peer with either the specified
|
// initiation of a channel funding workflow to the peer with either the specified
|
||||||
// relative peer ID, or a global lightning ID.
|
// relative peer ID, or a global lightning ID.
|
||||||
@ -1103,8 +1097,6 @@ out:
|
|||||||
s.handleDisconnectPeer(msg)
|
s.handleDisconnectPeer(msg)
|
||||||
case *connectPeerMsg:
|
case *connectPeerMsg:
|
||||||
s.handleConnectPeer(msg)
|
s.handleConnectPeer(msg)
|
||||||
case *listPeersMsg:
|
|
||||||
s.handleListPeers(msg)
|
|
||||||
case *openChanReq:
|
case *openChanReq:
|
||||||
s.handleOpenChanReq(msg)
|
s.handleOpenChanReq(msg)
|
||||||
}
|
}
|
||||||
@ -1118,21 +1110,6 @@ out:
|
|||||||
s.wg.Done()
|
s.wg.Done()
|
||||||
}
|
}
|
||||||
|
|
||||||
// handleListPeers sends a lice of all currently active peers to the original
|
|
||||||
// caller.
|
|
||||||
func (s *server) handleListPeers(msg *listPeersMsg) {
|
|
||||||
s.peersMtx.RLock()
|
|
||||||
|
|
||||||
peers := make([]*peer, 0, len(s.peersByID))
|
|
||||||
for _, peer := range s.peersByID {
|
|
||||||
peers = append(peers, peer)
|
|
||||||
}
|
|
||||||
|
|
||||||
s.peersMtx.RUnlock()
|
|
||||||
|
|
||||||
msg.resp <- peers
|
|
||||||
}
|
|
||||||
|
|
||||||
// handleConnectPeer attempts to establish a connection to the address enclosed
|
// handleConnectPeer attempts to establish a connection to the address enclosed
|
||||||
// within the passed connectPeerMsg. This function is *async*, a goroutine will
|
// within the passed connectPeerMsg. This function is *async*, a goroutine will
|
||||||
// be spawned in order to finish the request, and respond to the caller.
|
// be spawned in order to finish the request, and respond to the caller.
|
||||||
@ -1333,9 +1310,14 @@ func (s *server) OpenChannel(peerID int32, nodeKey *btcec.PublicKey,
|
|||||||
|
|
||||||
// Peers returns a slice of all active peers.
|
// Peers returns a slice of all active peers.
|
||||||
func (s *server) Peers() []*peer {
|
func (s *server) Peers() []*peer {
|
||||||
resp := make(chan []*peer, 1)
|
s.peersMtx.RLock()
|
||||||
|
|
||||||
s.queries <- &listPeersMsg{resp}
|
peers := make([]*peer, 0, len(s.peersByID))
|
||||||
|
for _, peer := range s.peersByID {
|
||||||
|
peers = append(peers, peer)
|
||||||
|
}
|
||||||
|
|
||||||
return <-resp
|
s.peersMtx.RUnlock()
|
||||||
|
|
||||||
|
return peers
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user