From bbb0d35e8014b5d2be2d9079aba1a9f88d9c1792 Mon Sep 17 00:00:00 2001 From: Andy Wang Date: Tue, 20 Aug 2019 23:15:36 +0100 Subject: [PATCH] Remove conns from map once switchboard.CloseAll is called --- internal/multiplex/switchboard.go | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/internal/multiplex/switchboard.go b/internal/multiplex/switchboard.go index 5449f7f..b7e8419 100644 --- a/internal/multiplex/switchboard.go +++ b/internal/multiplex/switchboard.go @@ -100,14 +100,10 @@ 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 { - n, err = conn.Write(data) - sb.AddTx(int64(n)) - return - } + 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() }