From dc1efc1a14391ea0c1dc60c454af7300352e6efe Mon Sep 17 00:00:00 2001 From: Bernhard B Date: Tue, 9 Jul 2024 21:24:24 +0200 Subject: [PATCH] protect map write with mutex * in order to make the r.receivedResponsesById map goroutine-safe, a mutex was added. This is not particular nice, but rewriting the jsonrpc connection handling would be quite a lot of work and has a big regression potential. So, if it is not absolutely necessary, I'd like to avoid that. see #555 --- src/client/jsonrpc2.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/client/jsonrpc2.go b/src/client/jsonrpc2.go index 5c12564..c572792 100644 --- a/src/client/jsonrpc2.go +++ b/src/client/jsonrpc2.go @@ -61,6 +61,7 @@ type JsonRpc2Client struct { signalCliApiConfig *utils.SignalCliApiConfig number string receivedMessagesMutex sync.Mutex + receivedResponsesMutex sync.Mutex } func NewJsonRpc2Client(signalCliApiConfig *utils.SignalCliApiConfig, number string) *JsonRpc2Client { @@ -137,11 +138,16 @@ func (r *JsonRpc2Client) getRaw(command string, account *string, args interface{ } responseChan := make(chan JsonRpc2MessageResponse) + r.receivedResponsesMutex.Lock() r.receivedResponsesById[u.String()] = responseChan + r.receivedResponsesMutex.Unlock() var resp JsonRpc2MessageResponse resp = <-responseChan + + r.receivedResponsesMutex.Lock() delete(r.receivedResponsesById, u.String()) + r.receivedResponsesMutex.Unlock() log.Debug("json-rpc command response message: ", string(resp.Result)) log.Debug("json-rpc response error: ", string(resp.Err.Message))