diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2015-02-25 08:52:49 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2015-02-25 08:52:49 +0900 |
commit | 12af62f25e35a85db5c319ea518d947f3d2d1783 (patch) | |
tree | 5234190efedd104a48d86dd03c173bf407e88481 | |
parent | 2c0eddfb9ddbaacf8fdea69d191b7c5857abd938 (diff) |
server: handle closed passiveConnCh channel
When a peer is deleted, passiveConnCh is closed implicitly.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | server/fsm.go | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/server/fsm.go b/server/fsm.go index 26f7b830..bac2a956 100644 --- a/server/fsm.go +++ b/server/fsm.go @@ -211,7 +211,10 @@ func (h *FSMHandler) idle() bgp.FSMState { select { case <-h.t.Dying(): return 0 - case conn := <-fsm.passiveConnCh: + case conn, ok := <-fsm.passiveConnCh: + if !ok { + break + } conn.Close() log.WithFields(log.Fields{ "Topic": "Peer", @@ -255,7 +258,10 @@ func (h *FSMHandler) active() bgp.FSMState { select { case <-h.t.Dying(): return 0 - case conn := <-fsm.passiveConnCh: + case conn, ok := <-fsm.passiveConnCh: + if !ok { + break + } fsm.passiveConn = conn // we don't implement delayed open timer so move to opensent right // away. @@ -407,7 +413,10 @@ func (h *FSMHandler) opensent() bgp.FSMState { case <-h.t.Dying(): h.conn.Close() return 0 - case conn := <-fsm.passiveConnCh: + case conn, ok := <-fsm.passiveConnCh: + if !ok { + break + } conn.Close() log.WithFields(log.Fields{ "Topic": "Peer", @@ -502,7 +511,10 @@ func (h *FSMHandler) openconfirm() bgp.FSMState { case <-h.t.Dying(): h.conn.Close() return 0 - case conn := <-fsm.passiveConnCh: + case conn, ok := <-fsm.passiveConnCh: + if !ok { + break + } conn.Close() log.WithFields(log.Fields{ "Topic": "Peer", @@ -644,7 +656,10 @@ func (h *FSMHandler) established() bgp.FSMState { select { case <-h.t.Dying(): return 0 - case conn := <-fsm.passiveConnCh: + case conn, ok := <-fsm.passiveConnCh: + if !ok { + break + } conn.Close() log.WithFields(log.Fields{ "Topic": "Peer", |