From 4b0cfc7539ec6fdbc462f60269656fee761bafaf Mon Sep 17 00:00:00 2001 From: Rastislav Szabo Date: Wed, 17 May 2017 16:19:30 +0200 Subject: multiple small fixes Change-Id: I9e822ce7e9b9f44f7d074b0294d6eda37c2a0f12 Signed-off-by: Rastislav Szabo --- adapter/mock/mock_adapter.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'adapter') diff --git a/adapter/mock/mock_adapter.go b/adapter/mock/mock_adapter.go index ab49cef..796b96e 100644 --- a/adapter/mock/mock_adapter.go +++ b/adapter/mock/mock_adapter.go @@ -37,7 +37,7 @@ type VppAdapter struct { msgIdsToName *map[uint16]string msgIdSeq uint16 binApiTypes map[string]reflect.Type - //TODO lock + access sync.RWMutex } // replyHeader represents a common header of each VPP request message. @@ -104,8 +104,6 @@ func (a *VppAdapter) Disconnect() { } func (a *VppAdapter) GetMsgNameByID(msgId uint16) (string, bool) { - a.initMaps() - switch msgId { case 100: return "control_ping", true @@ -117,12 +115,17 @@ func (a *VppAdapter) GetMsgNameByID(msgId uint16) (string, bool) { return "sw_interface_details", true } + a.access.Lock() + defer a.access.Unlock() + a.initMaps() msgName, found := (*a.msgIdsToName)[msgId] return msgName, found } func (a *VppAdapter) RegisterBinApiTypes(binApiTypes map[string]reflect.Type) { + a.access.Lock() + defer a.access.Unlock() a.initMaps() for _, v := range binApiTypes { if msg, ok := reflect.New(v).Interface().(api.Message); ok { @@ -187,6 +190,8 @@ func (a *VppAdapter) GetMsgID(msgName string, msgCrc string) (uint16, error) { return 201, nil } + a.access.Lock() + defer a.access.Unlock() a.initMaps() if msgId, found := (*a.msgNameToIds)[msgName]; found { @@ -219,6 +224,7 @@ func (a *VppAdapter) initMaps() { func (a *VppAdapter) SendMsg(clientID uint32, data []byte) error { switch mode { case useReplyHandlers: + a.initMaps() for i := len(replyHandlers) - 1; i >= 0; i-- { replyHandler := replyHandlers[i] @@ -226,8 +232,9 @@ func (a *VppAdapter) SendMsg(clientID uint32, data []byte) error { reqHeader := requestHeader{} struc.Unpack(buf, &reqHeader) - a.initMaps() + a.access.Lock() reqMsgName, _ := (*a.msgIdsToName)[reqHeader.VlMsgID] + a.access.Unlock() reply, msgID, finished := replyHandler(MessageDTO{reqHeader.VlMsgID, reqMsgName, clientID, data}) -- cgit 1.2.3-korg