diff --git a/p2p/peer.go b/p2p/peer.go index e800be80fc6e0..23ac11774988d 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -112,7 +112,6 @@ type Peer struct { wg sync.WaitGroup protoErr chan error closed chan struct{} - pingRecv chan struct{} disc chan DiscReason // events receives message send / receive events if set @@ -234,7 +233,6 @@ func newPeer(log log.Logger, conn *conn, protocols []Protocol) *Peer { disc: make(chan DiscReason), protoErr: make(chan error, len(protomap)+1), // protocols + pingLoop closed: make(chan struct{}), - pingRecv: make(chan struct{}, 16), log: log.New("id", conn.node.ID(), "conn", conn.flags), } return p @@ -295,11 +293,9 @@ loop: } func (p *Peer) pingLoop() { - defer p.wg.Done() - ping := time.NewTimer(pingInterval) + defer p.wg.Done() defer ping.Stop() - for { select { case <-ping.C: @@ -308,10 +304,6 @@ func (p *Peer) pingLoop() { return } ping.Reset(pingInterval) - - case <-p.pingRecv: - SendItems(p.rw, pongMsg) - case <-p.closed: return } @@ -338,10 +330,7 @@ func (p *Peer) handle(msg Msg) error { switch { case msg.Code == pingMsg: msg.Discard() - select { - case p.pingRecv <- struct{}{}: - case <-p.closed: - } + go SendItems(p.rw, pongMsg) case msg.Code == discMsg: // This is the last message. We don't need to discard or // check errors because, the connection will be closed after it.