diff --git a/transport/internet/finalmask/xdns/client.go b/transport/internet/finalmask/xdns/client.go index b976f154f..d454a8ccd 100644 --- a/transport/internet/finalmask/xdns/client.go +++ b/transport/internet/finalmask/xdns/client.go @@ -80,6 +80,9 @@ func NewClient(c *Config, dialer *finalmask.Dialer) (net.PacketConn, error) { for i := range c.Resolvers { resolver, err := NewResolver(c.Resolvers[i], dialer) if err != nil { + for _, resolver := range resolvers { + resolver.Close() + } return nil, err } resolvers = append(resolvers, resolver) diff --git a/transport/internet/finalmask/xdns/resolver_tcp.go b/transport/internet/finalmask/xdns/resolver_tcp.go index 89f2b0ea6..0d0d2d845 100644 --- a/transport/internet/finalmask/xdns/resolver_tcp.go +++ b/transport/internet/finalmask/xdns/resolver_tcp.go @@ -130,13 +130,15 @@ func (r *TCPResolver) Send(p []byte) { func (r *TCPResolver) Close() { r.mu.Lock() - defer r.mu.Unlock() if r.closed() { + r.mu.Unlock() return } close(r.closeCh) - if r.conn != nil { - _ = r.conn.Close() + conn := r.conn + r.mu.Unlock() + if conn != nil { + _ = conn.Close() } r.wg.Wait() close(r.readCh) diff --git a/transport/internet/finalmask/xdns/resolver_udp.go b/transport/internet/finalmask/xdns/resolver_udp.go index e8d97ba29..43c35007c 100644 --- a/transport/internet/finalmask/xdns/resolver_udp.go +++ b/transport/internet/finalmask/xdns/resolver_udp.go @@ -117,13 +117,15 @@ func (r *UDPResolver) Send(p []byte) { func (r *UDPResolver) Close() { r.mu.Lock() - defer r.mu.Unlock() if r.closed() { + r.mu.Unlock() return } close(r.closeCh) - if r.conn != nil { - _ = r.conn.Close() + conn := r.conn + r.mu.Unlock() + if conn != nil { + _ = conn.Close() } r.wg.Wait() close(r.readCh)