From e045441f52552d3cc97a7ed2e2b6186c406b7dfc Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Sun, 7 Jul 2013 19:58:01 -0700 Subject: [PATCH] fix peer stop channel problem --- peer.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/peer.go b/peer.go index 405ace6fde..fcb447d98a 100644 --- a/peer.go +++ b/peer.go @@ -32,7 +32,7 @@ func newPeer(server *Server, name string, heartbeatTimeout time.Duration) *Peer return &Peer{ server: server, name: name, - stopChan: make(chan bool), + stopChan: make(chan bool, 1), heartbeatTimeout: heartbeatTimeout, } } @@ -90,7 +90,17 @@ func (p *Peer) startHeartbeat() { // Stops the peer heartbeat. func (p *Peer) stopHeartbeat() { - p.stopChan <- true + // here is a problem + // the previous stop is no buffer leader may get blocked + // when heartbeat returns at line 132 + // I make the channel with 1 buffer + // and try to panic here + select { + case p.stopChan <- true: + + default: + panic("[" + p.server.Name() + "] cannot stop [" + p.Name() + "] heartbeat") + } } //--------------------------------------