server: fix deadlock in sendToPeer at peer shutdown

This commit fixes a deadlock that could occur when
a peer disconnected during a call to sentToPeer. In
This particular case, a message would successfully
be queued, the peer would shutdown, and we would
block waiting for an error to be returned on the
message's error channel, which would deadlock.
This fixes that by also checking for peer shutdown.
This commit is contained in:
Johan T. Halseth 2017-12-21 21:49:31 +01:00
parent 3b986b4c14
commit db8b4cad4a
No known key found for this signature in database
GPG Key ID: 15BAADA29DA20D26

@ -958,6 +958,8 @@ func (s *server) sendToPeer(target *btcec.PublicKey,
select {
case err := <-errChan:
return err
case <-targetPeer.quit:
return fmt.Errorf("peer shutting down")
case <-s.quit:
return ErrServerShuttingDown
}