Browse Source

elide deadlock

pull/8091/head
tycho garen 3 years ago
parent
commit
e3a0711c61
1 changed files with 32 additions and 19 deletions
  1. +32
    -19
      internal/consensus/state.go

+ 32
- 19
internal/consensus/state.go View File

@ -320,28 +320,41 @@ func (cs *State) GetValidators() (int64, []*types.Validator) {
// SetPrivValidator sets the private validator account for signing votes. It // SetPrivValidator sets the private validator account for signing votes. It
// immediately requests pubkey and caches it. // immediately requests pubkey and caches it.
func (cs *State) SetPrivValidator(ctx context.Context, priv types.PrivValidator) { func (cs *State) SetPrivValidator(ctx context.Context, priv types.PrivValidator) {
cs.mtx.Lock()
defer cs.mtx.Unlock()
func() {
cs.mtx.Lock()
defer cs.mtx.Unlock()
cs.privValidator = priv
cs.privValidator = priv
}()
if priv != nil { if priv != nil {
switch t := priv.(type) {
case *privval.RetrySignerClient:
cs.privValidatorType = types.RetrySignerClient
case *privval.FilePV:
cs.privValidatorType = types.FileSignerClient
case *privval.SignerClient:
cs.privValidatorType = types.SignerSocketClient
case *tmgrpc.SignerClient:
cs.privValidatorType = types.SignerGRPCClient
case types.MockPV:
cs.privValidatorType = types.MockSignerClient
case *types.ErroringMockPV:
cs.privValidatorType = types.ErrorMockSignerClient
default:
cs.logger.Error("unsupported priv validator type", "err",
fmt.Errorf("error privValidatorType %s", t))
ptype, err := func() (types.PrivValidatorType, error) {
switch t := priv.(type) {
case *privval.RetrySignerClient:
return types.RetrySignerClient, nil
case *privval.FilePV:
return types.FileSignerClient, nil
case *privval.SignerClient:
return types.SignerSocketClient, nil
case *tmgrpc.SignerClient:
return types.SignerGRPCClient, nil
case types.MockPV:
return types.MockSignerClient, nil
case *types.ErroringMockPV:
return types.ErrorMockSignerClient, nil
default:
return 0, fmt.Errorf("error privValidatorType %s", t)
}
}()
if err != nil {
cs.logger.Error("unsupported priv validator type", "err", err)
} else {
func() {
cs.mtx.Lock()
defer cs.mtx.Unlock()
cs.privValidatorType = ptype
}()
} }
} }


Loading…
Cancel
Save