diff --git a/privval/remote_signer.go b/privval/remote_signer.go index 37217de6..b80884de 100644 --- a/privval/remote_signer.go +++ b/privval/remote_signer.go @@ -4,6 +4,7 @@ import ( "fmt" "io" "net" + "sync" "github.com/pkg/errors" @@ -18,6 +19,7 @@ import ( type RemoteSignerClient struct { conn net.Conn consensusPubKey crypto.PubKey + mtx sync.Mutex } // Check that RemoteSignerClient implements PrivValidator. @@ -45,6 +47,9 @@ func (sc *RemoteSignerClient) GetPubKey() crypto.PubKey { } func (sc *RemoteSignerClient) getPubKey() (crypto.PubKey, error) { + sc.mtx.Lock() + defer sc.mtx.Unlock() + err := writeMsg(sc.conn, &PubKeyRequest{}) if err != nil { return nil, err @@ -68,6 +73,9 @@ func (sc *RemoteSignerClient) getPubKey() (crypto.PubKey, error) { // SignVote implements PrivValidator. func (sc *RemoteSignerClient) SignVote(chainID string, vote *types.Vote) error { + sc.mtx.Lock() + defer sc.mtx.Unlock() + err := writeMsg(sc.conn, &SignVoteRequest{Vote: vote}) if err != nil { return err @@ -95,6 +103,9 @@ func (sc *RemoteSignerClient) SignProposal( chainID string, proposal *types.Proposal, ) error { + sc.mtx.Lock() + defer sc.mtx.Unlock() + err := writeMsg(sc.conn, &SignProposalRequest{Proposal: proposal}) if err != nil { return err @@ -118,6 +129,9 @@ func (sc *RemoteSignerClient) SignProposal( // Ping is used to check connection health. func (sc *RemoteSignerClient) Ping() error { + sc.mtx.Lock() + defer sc.mtx.Unlock() + err := writeMsg(sc.conn, &PingRequest{}) if err != nil { return err