aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Elantsev <elantsev.s@yandex.ru>2020-08-22 15:38:34 +0300
committerOndrej Fabry <ofabry@cisco.com>2020-09-02 17:39:17 +0000
commit42d11af03300fe0a3476c32ad8c70297862d9320 (patch)
treeb5c6464f6fa9e2ec30985548d2cfe4eb07213ce3
parent15c53e7a9da6f61448b77339b5b762ada0050aff (diff)
fixed data race in mock vpp adapter
There was a race in reading VppAdapter.mode in SendMsg and writing in MockReply/MockReplyHandler/MockReplyWithContext. All these *Reply* methods hold VppAdapter.repliesLock, so this fix uses this lock to safely read the value of a mode field. Signed-off-by: Sergey Elantsev <elantsev.s@yandex.ru> Change-Id: I6c8873b766df6ea866196a9b96a48ebd08689772
-rw-r--r--adapter/mock/mock_vpp_adapter.go5
1 files changed, 4 insertions, 1 deletions
diff --git a/adapter/mock/mock_vpp_adapter.go b/adapter/mock/mock_vpp_adapter.go
index b7fa002..f79bb8b 100644
--- a/adapter/mock/mock_vpp_adapter.go
+++ b/adapter/mock/mock_vpp_adapter.go
@@ -252,7 +252,10 @@ func (a *VppAdapter) GetMsgID(msgName string, msgCrc string) (uint16, error) {
// SendMsg emulates sending a binary-encoded message to VPP.
func (a *VppAdapter) SendMsg(clientID uint32, data []byte) error {
- switch a.mode {
+ a.repliesLock.Lock()
+ mode := a.mode
+ a.repliesLock.Unlock()
+ switch mode {
case useReplyHandlers:
for i := len(a.replyHandlers) - 1; i >= 0; i-- {
replyHandler := a.replyHandlers[i]