Flush gossip inside the channel lock so we know sender hasn't been Stop()-ed

This commit is contained in:
Bryan Boreham committed 2015-06-10 12:22:38 +01:00
1 parent 35b3a2d6a6
commit 5ebfc9027b
1 file changed
+6 -10
+6 -10
View File
@@ -329,22 +329,18 @@ func (c *GossipChannel) log(args ...interface{}) {
// for testing
func (router *Router) sendPendingGossip() {
// copy the senders so we don't hold the lock for long
var allSenders []*GossipSender
for _, channel := range router.GossipChannels {
channel.Lock()
for _, sender := range channel.senders {
allSenders = append(allSenders, sender)
ch := make(chan struct{})
sender.flushch <- ch
<-ch
}
for _, sender := range channel.broadcasters {
allSenders = append(allSenders, sender)
ch := make(chan struct{})
sender.flushch <- ch
<-ch
}
channel.Unlock()
}
for _, sender := range allSenders {
ch := make(chan struct{})
sender.flushch <- ch
<-ch
}
}