Skip to content
Snippets Groups Projects
Commit d5692991 authored by Jonah Husson's avatar Jonah Husson
Browse files

Potential fix for deadlock

parent 8df5c2e4
No related branches found
No related tags found
2 merge requests!510Release,!249Increase bindings timeout in cmix params to 45 seconds
...@@ -42,6 +42,9 @@ func (p *partnerCallbacks) DeletePartnerCallback(partnerId *id.ID) { ...@@ -42,6 +42,9 @@ func (p *partnerCallbacks) DeletePartnerCallback(partnerId *id.ID) {
// getPartnerCallback returns the Callbacks for the given partnerId // getPartnerCallback returns the Callbacks for the given partnerId
func (p *partnerCallbacks) getPartnerCallback(partnerId *id.ID) Callbacks { func (p *partnerCallbacks) getPartnerCallback(partnerId *id.ID) Callbacks {
p.RLock()
defer p.RUnlock()
return p.callbacks[*partnerId] return p.callbacks[*partnerId]
} }
......
...@@ -113,13 +113,11 @@ func (rcs *receivedConfirmService) Process(msg format.Message, ...@@ -113,13 +113,11 @@ func (rcs *receivedConfirmService) Process(msg format.Message,
Facts: make([]fact.Fact, 0), Facts: make([]fact.Fact, 0),
} }
authState.partnerCallbacks.RLock()
if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil { if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil {
cb.Confirm(c, receptionID, round) cb.Confirm(c, receptionID, round)
} else { } else {
authState.callbacks.Confirm(c, receptionID, round) authState.callbacks.Confirm(c, receptionID, round)
} }
authState.partnerCallbacks.RUnlock()
} }
func (rcs *receivedConfirmService) String() string { func (rcs *receivedConfirmService) String() string {
......
...@@ -130,21 +130,17 @@ func (rrs *receivedRequestService) Process(message format.Message, ...@@ -130,21 +130,17 @@ func (rrs *receivedRequestService) Process(message format.Message,
} else if authState.params.ReplayRequests { } else if authState.params.ReplayRequests {
//if we did not already accept, auto replay the request //if we did not already accept, auto replay the request
if rrs.reset { if rrs.reset {
authState.partnerCallbacks.RLock()
if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil { if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil {
cb.Reset(c, receptionID, round) cb.Reset(c, receptionID, round)
} else { } else {
authState.callbacks.Reset(c, receptionID, round) authState.callbacks.Reset(c, receptionID, round)
} }
authState.partnerCallbacks.RUnlock()
} else { } else {
authState.partnerCallbacks.RLock()
if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil { if cb := authState.partnerCallbacks.getPartnerCallback(c.ID); cb != nil {
cb.Request(c, receptionID, round) cb.Request(c, receptionID, round)
} else { } else {
authState.callbacks.Request(c, receptionID, round) authState.callbacks.Request(c, receptionID, round)
} }
authState.partnerCallbacks.RUnlock()
} }
} }
//if not confirm, and params.replay requests is true, we need to replay //if not confirm, and params.replay requests is true, we need to replay
...@@ -254,8 +250,6 @@ func (rrs *receivedRequestService) Process(message format.Message, ...@@ -254,8 +250,6 @@ func (rrs *receivedRequestService) Process(message format.Message,
} }
// auto-confirm if we should // auto-confirm if we should
authState.partnerCallbacks.RLock()
defer authState.partnerCallbacks.RUnlock()
if autoConfirm || reset { if autoConfirm || reset {
_, _ = authState.confirm(c, authState.params.getConfirmTag(reset)) _, _ = authState.confirm(c, authState.params.getConfirmTag(reset))
//handle callbacks //handle callbacks
......
...@@ -115,13 +115,11 @@ func (s *state) CallAllReceivedRequests() { ...@@ -115,13 +115,11 @@ func (s *state) CallAllReceivedRequests() {
rr := rrList[i] rr := rrList[i]
eph := receptionID.BuildIdentityFromRound(rr.GetContact().ID, eph := receptionID.BuildIdentityFromRound(rr.GetContact().ID,
rr.GetRound()) rr.GetRound())
s.partnerCallbacks.RLock()
if cb := s.partnerCallbacks.getPartnerCallback(rr.GetContact().ID); cb != nil { if cb := s.partnerCallbacks.getPartnerCallback(rr.GetContact().ID); cb != nil {
cb.Request(rr.GetContact(), eph, rr.GetRound()) cb.Request(rr.GetContact(), eph, rr.GetRound())
} else { } else {
s.callbacks.Request(rr.GetContact(), eph, rr.GetRound()) s.callbacks.Request(rr.GetContact(), eph, rr.GetRound())
} }
s.partnerCallbacks.RUnlock()
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment