From 69eb6490c61252e3e5a51abb4c1d5f229f2af5e8 Mon Sep 17 00:00:00 2001 From: Zach Reyes Date: Fri, 19 Mar 2021 10:08:54 -0400 Subject: [PATCH] Added polling to wait group --- internal/resolver/dns/dns_resolver.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/internal/resolver/dns/dns_resolver.go b/internal/resolver/dns/dns_resolver.go index 61a61691113c..12cd38330a09 100644 --- a/internal/resolver/dns/dns_resolver.go +++ b/internal/resolver/dns/dns_resolver.go @@ -213,14 +213,16 @@ func (d *dnsResolver) poll(errorFromClientConn error) { } p := make(chan struct{}) d.polling = p - // This exponential backoff go routine will be running at most once + // This exponential backoff go routine will be running at most once. + d.wg.Add(1) go func() { + defer d.wg.Done() // Exponentially backoff until it hopefully succeeds. for i := 0; ; i++ { t := newTimer(backoff.DefaultExponential.Backoff(i)) select { case <-p: - // Polling was successful + // Polling was successful. t.Stop() return case <-d.ctx.Done(): @@ -228,11 +230,11 @@ func (d *dnsResolver) poll(errorFromClientConn error) { case <-t.C: select { case <-p: - // Polling was successful + // Polling was successful. return default: } - // Timer expired; re-resolve + // Timer expired; re-resolve. } // After select for testing purposes. Forcing a re-resolution would cause many tests to be flaky. // This allows a re-resolution to be guarded by the resolveNowBackoff() function, which can be toggled