Browse Source

raft: return empty status if node is stopped

If the node is stopped, then Status can hang forever because there is no
event loop to answer. So, just return empty status to avoid deadlocks.

Fix #6855

Signed-off-by: Alexander Morozov <lk4d4math@gmail.com>
Alexander Morozov 9 năm trước cách đây
mục cha
commit
7afc490c95
1 tập tin đã thay đổi với 6 bổ sung2 xóa
  1. 6 2
      raft/node.go

+ 6 - 2
raft/node.go

@@ -462,8 +462,12 @@ func (n *node) ApplyConfChange(cc pb.ConfChange) *pb.ConfState {
 
 func (n *node) Status() Status {
 	c := make(chan Status)
-	n.status <- c
-	return <-c
+	select {
+	case n.status <- c:
+		return <-c
+	case <-n.done:
+		return Status{}
+	}
 }
 
 func (n *node) ReportUnreachable(id uint64) {