From 7ac507d9ffd19e03737345408b62a732ec706c73 Mon Sep 17 00:00:00 2001 From: Ruslan Drozhdzh <30860269+rdrozhdzh@users.noreply.github.com> Date: Fri, 18 May 2018 09:46:14 +0300 Subject: [PATCH] plugin/forward: close connection manager in proxy finalizer (#1768) - connManager() goroutine will stop when Proxy is about to be garbage collected. This means that no queries are in progress, and no queries are going to come --- plugin/forward/proxy.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugin/forward/proxy.go b/plugin/forward/proxy.go index 588b21510..a162ace1b 100644 --- a/plugin/forward/proxy.go +++ b/plugin/forward/proxy.go @@ -2,6 +2,7 @@ package forward import ( "crypto/tls" + "runtime" "sync/atomic" "time" @@ -36,6 +37,7 @@ func NewProxy(addr string, tlsConfig *tls.Config) *Proxy { avgRtt: int64(timeout / 2), } p.client = dnsClient(tlsConfig) + runtime.SetFinalizer(p, (*Proxy).finalizer) return p } @@ -91,6 +93,9 @@ func (p *Proxy) Down(maxfails uint32) bool { // close stops the health checking goroutine. func (p *Proxy) close() { p.probe.Stop() +} + +func (p *Proxy) finalizer() { p.transport.Stop() }