diff --git a/auth/callbacks.go b/auth/callbacks.go index 781164bb89e374f166b0ace4d4fb639e7c250d10..3c5862e7a13d901b874b12dc3c274852cf49b13c 100644 --- a/auth/callbacks.go +++ b/auth/callbacks.go @@ -42,6 +42,9 @@ func (p *partnerCallbacks) DeletePartnerCallback(partnerId *id.ID) { // getPartnerCallback returns the Callbacks for the given partnerId func (p *partnerCallbacks) getPartnerCallback(partnerId *id.ID) Callbacks { + p.RLock() + defer p.RUnlock() + return p.callbacks[*partnerId] } diff --git a/auth/receivedConfirm.go b/auth/receivedConfirm.go index 538329e1b532a1a34d813f866dfb739319c09d3b..bf25d5661743e226f2d7cb2024cff457365ab20c 100644 --- a/auth/receivedConfirm.go +++ b/auth/receivedConfirm.go @@ -113,13 +113,11 @@ func (rcs *receivedConfirmService) Process(msg format.Message, Facts: make([]fact.Fact, 0), } - authState.partnerCallbacks.RLock() if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil { cb.Confirm(c, receptionID, round) } else { authState.callbacks.Confirm(c, receptionID, round) } - authState.partnerCallbacks.RUnlock() } func (rcs *receivedConfirmService) String() string { diff --git a/auth/receivedRequest.go b/auth/receivedRequest.go index b410b04a3e29cca95dedd8bc14d310507e8bce57..4e3325996a6ca5c558d3531a019c68c92f026bf3 100644 --- a/auth/receivedRequest.go +++ b/auth/receivedRequest.go @@ -130,21 +130,17 @@ func (rrs *receivedRequestService) Process(message format.Message, } else if authState.params.ReplayRequests { //if we did not already accept, auto replay the request if rrs.reset { - authState.partnerCallbacks.RLock() if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil { cb.Reset(c, receptionID, round) } else { authState.callbacks.Reset(c, receptionID, round) } - authState.partnerCallbacks.RUnlock() } else { - authState.partnerCallbacks.RLock() if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil { cb.Request(c, receptionID, round) } else { authState.callbacks.Request(c, receptionID, round) } - authState.partnerCallbacks.RUnlock() } } //if not confirm, and params.replay requests is true, we need to replay @@ -254,8 +250,6 @@ func (rrs *receivedRequestService) Process(message format.Message, } // auto-confirm if we should - authState.partnerCallbacks.RLock() - defer authState.partnerCallbacks.RUnlock() if autoConfirm || reset { _, _ = authState.confirm(c, authState.params.getConfirmTag(reset)) //handle callbacks diff --git a/auth/state.go b/auth/state.go index 43e1d9735fde5bd0e5c4bbc396ec3ff74727c4b5..fda5ba2c98c08f36be9ae3b58aedcec618ef0b4b 100644 --- a/auth/state.go +++ b/auth/state.go @@ -115,13 +115,11 @@ func (s *state) CallAllReceivedRequests() { rr := rrList[i] eph := receptionID.BuildIdentityFromRound(rr.GetContact().ID, rr.GetRound()) - s.partnerCallbacks.RLock() if cb := s.partnerCallbacks.getPartnerCallback(rr.GetContact().ID); cb != nil { cb.Request(rr.GetContact(), eph, rr.GetRound()) } else { s.callbacks.Request(rr.GetContact(), eph, rr.GetRound()) } - s.partnerCallbacks.RUnlock() } }