diff --git a/eth/protocols/eth/peer.go b/eth/protocols/eth/peer.go index 79edc7d77c..586551b452 100644 --- a/eth/protocols/eth/peer.go +++ b/eth/protocols/eth/peer.go @@ -95,6 +95,7 @@ func NewPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter, txpool TxPool) *Pe // clean it up! func (p *Peer) Close() { close(p.term) + p.meters.Close() } // ID retrieves the peer's unique identifier. diff --git a/eth/protocols/eth/peer_metrics.go b/eth/protocols/eth/peer_metrics.go index 68f74b9b99..ce6b4e2373 100644 --- a/eth/protocols/eth/peer_metrics.go +++ b/eth/protocols/eth/peer_metrics.go @@ -19,6 +19,9 @@ package eth import "github.com/ethereum/go-ethereum/metrics" type peerMeters struct { + base string + reg metrics.Registry + txReceived *metrics.Meter txSent *metrics.Meter @@ -30,7 +33,13 @@ type peerMeters struct { // newPeerMeters registers and returns peer-level meters. func newPeerMeters(base string, r metrics.Registry) *peerMeters { + if r == nil { + r = metrics.DefaultRegistry + } return &peerMeters{ + base: base, + reg: r, + txReceived: metrics.NewRegisteredMeter(base+"/txReceived", r), txSent: metrics.NewRegisteredMeter(base+"/txSent", r), @@ -40,3 +49,12 @@ func newPeerMeters(base string, r metrics.Registry) *peerMeters { txReplyOtherRejectMeter: metrics.NewRegisteredMeter(base+"/eth/fetcher/transaction/replies/otherreject", r), } } + +func (m *peerMeters) Close() { + m.reg.Unregister(m.base + "/txReceived") + m.reg.Unregister(m.base + "/txSent") + m.reg.Unregister(m.base + "/eth/fetcher/transaction/replies/in") + m.reg.Unregister(m.base + "/eth/fetcher/transaction/replies/known") + m.reg.Unregister(m.base + "/eth/fetcher/transaction/replies/underpriced") + m.reg.Unregister(m.base + "/eth/fetcher/transaction/replies/otherreject") +}