Browse Source

handle panics

pull/8139/head
William Banfield 3 years ago
parent
commit
52ba4dfb36
No known key found for this signature in database GPG Key ID: EFAD3442BF29E3AC
1 changed files with 2 additions and 8 deletions
  1. +2
    -8
      internal/consensus/state.go

+ 2
- 8
internal/consensus/state.go View File

@ -948,6 +948,8 @@ func (cs *State) receiveRoutine(ctx context.Context, maxSteps int) {
// state transitions on complete-proposal, 2/3-any, 2/3-one
func (cs *State) handleMsg(ctx context.Context, mi msgInfo) {
cs.mtx.Lock()
defer cs.mtx.Unlock()
var (
added bool
err error
@ -959,13 +961,10 @@ func (cs *State) handleMsg(ctx context.Context, mi msgInfo) {
case *ProposalMessage:
// will not cause transition.
// once proposal is set, we can receive block parts
cs.mtx.Lock()
err = cs.setProposal(msg.Proposal, mi.ReceiveTime)
cs.mtx.Unlock()
case *BlockPartMessage:
// if the proposal is complete, we'll enterPrevote or tryFinalizeCommit
cs.mtx.Lock()
added, err = cs.addProposalBlockPart(ctx, msg, peerID)
// We unlock here to yield to any routines that need to read the the RoundState.
@ -989,7 +988,6 @@ func (cs *State) handleMsg(ctx context.Context, mi msgInfo) {
select {
case cs.statsMsgQueue <- mi:
case <-ctx.Done():
cs.mtx.Unlock()
return
}
}
@ -1003,22 +1001,18 @@ func (cs *State) handleMsg(ctx context.Context, mi msgInfo) {
)
err = nil
}
cs.mtx.Unlock()
case *VoteMessage:
// attempt to add the vote and dupeout the validator if its a duplicate signature
// if the vote gives us a 2/3-any or 2/3-one, we transition
cs.mtx.Lock()
added, err = cs.tryAddVote(ctx, msg.Vote, peerID)
if added {
select {
case cs.statsMsgQueue <- mi:
case <-ctx.Done():
cs.mtx.Unlock()
return
}
}
cs.mtx.Unlock()
// TODO: punish peer
// We probably don't want to stop the peer here. The vote does not


Loading…
Cancel
Save