Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 969607f

Browse files
committed
Fix close listener func
1 parent 5e7197c commit 969607f

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

tailnet/conn.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ func NewConn(options *Options) (*Conn, error) {
187187
logIPs, _ := logIPSet.IPSet()
188188
wireguardEngine.SetFilter(filter.New(netMap.PacketFilter, localIPs, logIPs, nil, Logger(options.Logger.Named("packet-filter"))))
189189
server := &Conn{
190+
closed: make(chan struct{}),
190191
logger: options.Logger,
191192
magicConn: magicConn,
192193
dialer: dialer,
@@ -341,16 +342,16 @@ func (c *Conn) Closed() chan<- struct{} {
341342

342343
// Close shuts down the Wireguard connection.
343344
func (c *Conn) Close() error {
344-
for _, l := range c.listeners {
345-
_ = l.Close()
346-
}
347345
c.mutex.Lock()
348346
defer c.mutex.Unlock()
349347
select {
350348
case <-c.closed:
351349
return nil
352350
default:
353351
}
352+
for _, l := range c.listeners {
353+
_ = l.closeNoLock()
354+
}
354355
close(c.closed)
355356
_ = c.dialer.Close()
356357
_ = c.magicConn.Close()
@@ -454,6 +455,10 @@ func (ln *listener) Addr() net.Addr { return addr{ln} }
454455
func (ln *listener) Close() error {
455456
ln.s.mutex.Lock()
456457
defer ln.s.mutex.Unlock()
458+
return ln.closeNoLock()
459+
}
460+
461+
func (ln *listener) closeNoLock() error {
457462
if v, ok := ln.s.listeners[ln.key]; ok && v == ln {
458463
delete(ln.s.listeners, ln.key)
459464
close(ln.conn)

0 commit comments

Comments
 (0)