mirror of
https://github.com/tendermint/tendermint.git
synced 2026-08-28 03:46:33 +00:00
recover on send on closed channel in statesync
This commit is contained in:
@@ -902,7 +902,11 @@ func (r *Reactor) processPeerUpdate(peerUpdate p2p.PeerUpdate) {
|
||||
case p2p.PeerStatusUp:
|
||||
newProvider := NewBlockProvider(peerUpdate.NodeID, r.chainID, r.dispatcher)
|
||||
r.providers[peerUpdate.NodeID] = newProvider
|
||||
r.syncer.AddPeer(peerUpdate.NodeID)
|
||||
err := r.syncer.AddPeer(peerUpdate.NodeID)
|
||||
if err != nil {
|
||||
r.Logger.Error("error adding peer to syncer", "error", err)
|
||||
return
|
||||
}
|
||||
if sp, ok := r.stateProvider.(*stateProviderP2P); ok {
|
||||
// we do this in a separate routine to not block whilst waiting for the light client to finish
|
||||
// whatever call it's currently executing
|
||||
|
||||
@@ -141,7 +141,14 @@ func (s *syncer) AddSnapshot(peerID types.NodeID, snapshot *snapshot) (bool, err
|
||||
|
||||
// AddPeer adds a peer to the pool. For now we just keep it simple and send a
|
||||
// single request to discover snapshots, later we may want to do retries and stuff.
|
||||
func (s *syncer) AddPeer(peerID types.NodeID) {
|
||||
func (s *syncer) AddPeer(peerID types.NodeID) error {
|
||||
var err error
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
err = fmt.Errorf("panic sending peer snapshot request: %v", r)
|
||||
}
|
||||
}()
|
||||
|
||||
s.logger.Debug("Requesting snapshots from peer", "peer", peerID)
|
||||
|
||||
msg := p2p.Envelope{
|
||||
@@ -153,6 +160,7 @@ func (s *syncer) AddPeer(peerID types.NodeID) {
|
||||
case <-s.closeCh:
|
||||
case s.snapshotCh <- msg:
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// RemovePeer removes a peer from the pool.
|
||||
|
||||
Reference in New Issue
Block a user