Skip to content

Commit b8a3771

Browse files
committed
fix(xdns): address code review findings
1 parent 9144453 commit b8a3771

1 file changed

Lines changed: 21 additions & 17 deletions

File tree

transport/internet/finalmask/xdns/client.go

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@ type xdnsConnClient struct {
6666
readQueue chan *packet
6767
writeQueue chan *packet
6868

69-
closed atomic.Bool
70-
mutex sync.Mutex
69+
closed atomic.Bool
70+
closeOnce sync.Once
71+
closeErr error
72+
mutex sync.Mutex
7173
}
7274

7375
func NewConnClient(c *Config, raw net.PacketConn) (net.PacketConn, error) {
@@ -304,21 +306,23 @@ func (c *xdnsConnClient) WriteTo(p []byte, addr net.Addr) (n int, err error) {
304306
}
305307

306308
func (c *xdnsConnClient) Close() error {
307-
c.closed.Store(true)
308-
for _, rc := range c.resolverConns {
309-
rc.conn.Close()
310-
}
311-
err := c.PacketConn.Close()
312-
if len(c.resolverConns) > 0 {
313-
c.recvWg.Wait()
314-
close(c.pollChan)
315-
close(c.readQueue)
316-
c.mutex.Lock()
317-
close(c.writeQueue)
318-
c.mutex.Unlock()
319-
}
320-
c.sendWg.Wait()
321-
return err
309+
c.closeOnce.Do(func() {
310+
c.closed.Store(true)
311+
for _, rc := range c.resolverConns {
312+
rc.conn.Close()
313+
}
314+
c.closeErr = c.PacketConn.Close()
315+
if len(c.resolverConns) > 0 {
316+
c.recvWg.Wait()
317+
close(c.pollChan)
318+
close(c.readQueue)
319+
c.mutex.Lock()
320+
close(c.writeQueue)
321+
c.mutex.Unlock()
322+
}
323+
c.sendWg.Wait()
324+
})
325+
return c.closeErr
322326
}
323327

324328
func encode(p []byte, clientID []byte, domain Name) ([]byte, error) {

0 commit comments

Comments
 (0)