From 5f3df9343cd715b233c05b474c3c4bc11dde2581 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Sat, 16 Oct 2021 19:09:04 -0400 Subject: [PATCH] fix: goroutine leak on ping --- waku/v2/node/wakunode2.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/waku/v2/node/wakunode2.go b/waku/v2/node/wakunode2.go index bc7cf9d9..c184704f 100644 --- a/waku/v2/node/wakunode2.go +++ b/waku/v2/node/wakunode2.go @@ -695,13 +695,26 @@ func (w *WakuNode) startKeepAlive(t time.Duration) { w.ping = ping.NewPingService(w.host) ticker := time.NewTicker(t) + go func() { for { select { case <-ticker.C: - for _, peer := range w.host.Network().Peers() { - log.Debug("Pinging", peer) - w.ping.Ping(w.ctx, peer) + for _, p := range w.host.Network().Peers() { + log.Debug("Pinging ", p) + go func(peer peer.ID) { + ctx, cancel := context.WithTimeout(w.ctx, 3*time.Second) + defer cancel() + pr := w.ping.Ping(ctx, peer) + select { + case res := <-pr: + if res.Error != nil { + log.Error(fmt.Sprintf("Could not ping %s: %s", peer, res.Error.Error())) + } + case <-ctx.Done(): + log.Error(fmt.Sprintf("Could not ping %s: %s", peer, ctx.Err())) + } + }(p) } case <-w.quit: ticker.Stop()