recover on send on closed channel in statesync

This commit is contained in:
William Banfield
2021-09-30 13:40:21 -04:00
parent db44aeb62b
commit 0d72e89ac4
2 changed files with 14 additions and 2 deletions
+5 -1
View File
@@ -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
+9 -1
View File
@@ -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.