Skip to content

Commit 72555e2

Browse files
committed
Fix close leak in derpmesh
1 parent 38465ac commit 72555e2

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

enterprise/derpmesh/derpmesh.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ func (m *Mesh) SetAddresses(addresses []string, connect bool) {
9393
func (m *Mesh) addAddress(address string, connect bool) (bool, error) {
9494
m.mutex.Lock()
9595
defer m.mutex.Unlock()
96+
if m.isClosed() {
97+
return false, nil
98+
}
9699
_, isActive := m.active[address]
97100
if isActive {
98101
return false, nil
@@ -142,14 +145,21 @@ func (m *Mesh) removeAddress(address string) bool {
142145
func (m *Mesh) Close() error {
143146
m.mutex.Lock()
144147
defer m.mutex.Unlock()
145-
select {
146-
case <-m.closed:
148+
if m.isClosed() {
147149
return nil
148-
default:
149150
}
150151
close(m.closed)
151152
for _, cancelFunc := range m.active {
152153
cancelFunc()
153154
}
154155
return nil
155156
}
157+
158+
func (m *Mesh) isClosed() bool {
159+
select {
160+
case <-m.closed:
161+
return true
162+
default:
163+
}
164+
return false
165+
}

0 commit comments

Comments
 (0)