From 7ccf58e500b49e447530e1721c1a8e60369cf49a Mon Sep 17 00:00:00 2001 From: vyzo Date: Wed, 31 Mar 2021 16:42:04 +0300 Subject: [PATCH] use a timer instead of time.After --- swarm_dial.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/swarm_dial.go b/swarm_dial.go index 2b7f0b0..de16ba3 100644 --- a/swarm_dial.go +++ b/swarm_dial.go @@ -361,9 +361,16 @@ func (s *Swarm) dialWorkerLoop(ctx context.Context, p peer.ID, reqch <-chan Dial } var triggerDial <-chan time.Time + var triggerTimer *time.Timer triggerNow := make(chan time.Time) close(triggerNow) + defer func() { + if triggerTimer != nil { + triggerTimer.Stop() + } + }() + var nextDial []ma.Multiaddr active := 0 done := false @@ -504,7 +511,15 @@ loop: // select an appropriate delay for the next dial batch delay := s.delayForNextDial(lastDial) - triggerDial = time.After(delay) + if triggerTimer == nil { + triggerTimer = time.NewTimer(delay) + } else { + if !triggerTimer.Stop() && triggerDial != triggerTimer.C { + <-triggerTimer.C + } + triggerTimer.Reset(delay) + } + triggerDial = triggerTimer.C case res := <-resch: active-- -- GitLab