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