From b7cb257b5a0e83a565b83ae4937bb018a3604725 Mon Sep 17 00:00:00 2001 From: biningo Date: Tue, 3 Sep 2024 22:41:01 +0800 Subject: [PATCH] Fix memory leaks caused by time.After --- subscriber.go | 3 ++- syncer.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/subscriber.go b/subscriber.go index 8fc4eac9..580ebcfb 100644 --- a/subscriber.go +++ b/subscriber.go @@ -58,12 +58,13 @@ func (s *subscriber) start(wg *sync.WaitGroup) { err error ) // Try until successfully connect to Redis. + timer := time.NewTimer(s.retryTimeout) for { pubsub, err = s.broker.CancelationPubSub() if err != nil { s.logger.Errorf("cannot subscribe to cancelation channel: %v", err) select { - case <-time.After(s.retryTimeout): + case <-timer.C: continue case <-s.done: s.logger.Debug("Subscriber done") diff --git a/syncer.go b/syncer.go index f1be1933..0e1c78cc 100644 --- a/syncer.go +++ b/syncer.go @@ -57,6 +57,7 @@ func (s *syncer) start(wg *sync.WaitGroup) { go func() { defer wg.Done() var requests []*syncRequest + timer := time.NewTimer(s.interval) for { select { case <-s.done: @@ -70,7 +71,7 @@ func (s *syncer) start(wg *sync.WaitGroup) { return case req := <-s.requestsCh: requests = append(requests, req) - case <-time.After(s.interval): + case <-timer.C: var temp []*syncRequest for _, req := range requests { if req.deadline.Before(time.Now()) {