mirror of
https://github.com/aljazceru/signal-cli-rest-api.git
synced 2025-12-20 08:04:28 +01:00
fixed deadlock in json-rpc mode
* properly unlock mutex to avoid deadlock see #572
This commit is contained in:
@@ -531,10 +531,11 @@ func (a *Api) wsPing(ws *websocket.Conn, stop chan struct{}) {
|
|||||||
return
|
return
|
||||||
case <-pingTicker.C:
|
case <-pingTicker.C:
|
||||||
a.wsMutex.Lock()
|
a.wsMutex.Lock()
|
||||||
defer a.wsMutex.Unlock()
|
|
||||||
if err := ws.WriteMessage(websocket.PingMessage, []byte{}); err != nil {
|
if err := ws.WriteMessage(websocket.PingMessage, []byte{}); err != nil {
|
||||||
|
a.wsMutex.Unlock()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
a.wsMutex.Unlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -229,14 +229,14 @@ func (r *JsonRpc2Client) GetReceiveChannel() (chan JsonRpc2ReceivedMessage, stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
r.receivedMessagesMutex.Lock()
|
r.receivedMessagesMutex.Lock()
|
||||||
defer r.receivedMessagesMutex.Unlock()
|
|
||||||
r.receivedMessagesChannels[channelUuid.String()] = c
|
r.receivedMessagesChannels[channelUuid.String()] = c
|
||||||
|
r.receivedMessagesMutex.Unlock()
|
||||||
|
|
||||||
return c, channelUuid.String(), nil
|
return c, channelUuid.String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *JsonRpc2Client) RemoveReceiveChannel(channelUuid string) {
|
func (r *JsonRpc2Client) RemoveReceiveChannel(channelUuid string) {
|
||||||
r.receivedMessagesMutex.Lock()
|
r.receivedMessagesMutex.Lock()
|
||||||
defer r.receivedMessagesMutex.Unlock()
|
|
||||||
delete(r.receivedMessagesChannels, channelUuid)
|
delete(r.receivedMessagesChannels, channelUuid)
|
||||||
|
r.receivedMessagesMutex.Unlock()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user