Remove conns from map once switchboard.CloseAll is called

This commit is contained in:
Andy Wang 2019-08-20 23:15:36 +01:00
parent 8b99e419b3
commit bbb0d35e80
1 changed files with 6 additions and 10 deletions

View File

@ -100,16 +100,12 @@ func (sb *switchboard) send(data []byte, connId *uint32) (n int, err error) {
return 0, errBrokenSwitchboard
}
newConnId := rand.Intn(len(sb.conns))
conn, ok = sb.conns[uint32(newConnId)]
if !ok {
return 0, errBrokenSwitchboard
} else {
conn, _ = sb.conns[uint32(newConnId)]
n, err = conn.Write(data)
sb.AddTx(int64(n))
return
}
}
}
}
@ -125,14 +121,14 @@ func (sb *switchboard) assignRandomConn() (uint32, error) {
}
// actively triggered by session.Close()
// TODO: closeALl needs to clear the conns map
func (sb *switchboard) closeAll() {
if atomic.SwapUint32(&sb.broken, 1) == 1 {
return
}
sb.connsM.RLock()
for _, conn := range sb.conns {
for key, conn := range sb.conns {
conn.Close()
delete(sb.conns, key)
}
sb.connsM.RUnlock()
}