From d20adc8e0e37d6221ca79d8951466b1210c95e59 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Mon, 7 May 2018 18:36:08 -0700 Subject: [PATCH] server: use nil errChan for broadcasts This skips creating errChans when sending messages to peer during broadcast. This should be a minor memory optimization, as well as not requiring channel sends on those which will never be read. --- server.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/server.go b/server.go index 9c259f442..9783dc51d 100644 --- a/server.go +++ b/server.go @@ -1091,7 +1091,7 @@ func (s *server) SendToPeer(target *btcec.PublicKey, case err := <-errChan: return err case <-targetPeer.quit: - return fmt.Errorf("peer shutting down") + return ErrPeerExiting case <-s.quit: return ErrServerShuttingDown } @@ -1183,7 +1183,8 @@ func (s *server) sendPeerMessages( // event, we defer a call to Done on both WaitGroups to 1) ensure that // server will be able to shutdown after its go routines exit, and 2) // so the server can return to the caller of BroadcastMessage. - if wg != nil { + isBroadcast := wg != nil + if isBroadcast { defer s.wg.Done() defer wg.Done() } @@ -1193,9 +1194,16 @@ func (s *server) sendPeerMessages( // the queue. var errChans []chan error for _, msg := range msgs { - errChan := make(chan error, 1) + // If this is not broadcast, create error channels to provide + // synchronous feedback regarding the delivery of the message to + // a specific peer. + var errChan chan error + if !isBroadcast { + errChan = make(chan error, 1) + errChans = append(errChans, errChan) + } + targetPeer.queueMsg(msg, errChan) - errChans = append(errChans, errChan) } return errChans