Add option not to store all received RTTs (#115)

This prevents memory bloat from a process that wants to do very long-running ping tests.
This commit is contained in:
rrcollier 2020-10-20 23:19:59 +01:00 committed by GitHub
parent 5f9dc3248b
commit 265e7c64b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

19
ping.go
View File

@ -77,11 +77,12 @@ var (
func New(addr string) *Pinger { func New(addr string) *Pinger {
r := rand.New(rand.NewSource(time.Now().UnixNano())) r := rand.New(rand.NewSource(time.Now().UnixNano()))
return &Pinger{ return &Pinger{
Count: -1, Count: -1,
Interval: time.Second, Interval: time.Second,
Size: timeSliceLength, RecordRtts: true,
Timeout: time.Second * 100000, Size: timeSliceLength,
Tracker: r.Int63n(math.MaxInt64), Timeout: time.Second * 100000,
Tracker: r.Int63n(math.MaxInt64),
addr: addr, addr: addr,
done: make(chan bool), done: make(chan bool),
@ -122,6 +123,10 @@ type Pinger struct {
// Number of packets received // Number of packets received
PacketsRecv int PacketsRecv int
// If true, keep a record of rtts of all received packets.
// Set to false to avoid memory bloat for long running pings.
RecordRtts bool
// rtts is all of the Rtts // rtts is all of the Rtts
rtts []time.Duration rtts []time.Duration
@ -538,7 +543,9 @@ func (p *Pinger) processPacket(recv *packet) error {
return fmt.Errorf("invalid ICMP echo reply; type: '%T', '%v'", pkt, pkt) return fmt.Errorf("invalid ICMP echo reply; type: '%T', '%v'", pkt, pkt)
} }
p.rtts = append(p.rtts, outPkt.Rtt) if p.RecordRtts {
p.rtts = append(p.rtts, outPkt.Rtt)
}
handler := p.OnRecv handler := p.OnRecv
if handler != nil { if handler != nil {
handler(outPkt) handler(outPkt)