Browse Source

Merge pull request #1412 from tendermint/bucky/exit-conR-subscribe-routine

consensus: check for closed subscription channels and exit routine
pull/1391/head
Ethan Buchman 6 years ago
committed by GitHub
parent
commit
7aa6d36258
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 3 deletions
  1. +9
    -3
      consensus/reactor.go

+ 9
- 3
consensus/reactor.go View File

@ -371,19 +371,21 @@ func (conR *ConsensusReactor) startBroadcastRoutine() error {
}
go func() {
var data interface{}
var ok bool
for {
select {
case data, ok := <-stepsCh:
case data, ok = <-stepsCh:
if ok { // a receive from a closed channel returns the zero value immediately
edrs := data.(types.TMEventData).Unwrap().(types.EventDataRoundState)
conR.broadcastNewRoundStep(edrs.RoundState.(*cstypes.RoundState))
}
case data, ok := <-votesCh:
case data, ok = <-votesCh:
if ok {
edv := data.(types.TMEventData).Unwrap().(types.EventDataVote)
conR.broadcastHasVoteMessage(edv.Vote)
}
case data, ok := <-heartbeatsCh:
case data, ok = <-heartbeatsCh:
if ok {
edph := data.(types.TMEventData).Unwrap().(types.EventDataProposalHeartbeat)
conR.broadcastProposalHeartbeatMessage(edph)
@ -392,6 +394,10 @@ func (conR *ConsensusReactor) startBroadcastRoutine() error {
conR.eventBus.UnsubscribeAll(ctx, subscriber)
return
}
if !ok {
conR.eventBus.UnsubscribeAll(ctx, subscriber)
return
}
}
}()


Loading…
Cancel
Save