Skip to content

Commit

Permalink
receive/handler: do not double lock (#7124)
Browse files Browse the repository at this point in the history
markPeerUnavailable was always taking a lock and in one case we were
calling it with a lock already taken. Fix this.

Signed-off-by: Giedrius Statkevičius <giedrius.statkevicius@vinted.com>
  • Loading branch information
GiedriusS committed Feb 9, 2024
1 parent 37092db commit 29831f8
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion pkg/receive/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -1376,7 +1376,7 @@ func (p *peerGroup) getConnection(ctx context.Context, addr string) (WriteableSt
}
conn, err := p.dialer(ctx, addr, p.dialOpts...)
if err != nil {
p.markPeerUnavailable(addr)
p.markPeerUnavailableUnlocked(addr)
dialError := errors.Wrap(err, "failed to dial peer")
return nil, errors.Wrap(dialError, errUnavailable.Error())
}
Expand All @@ -1389,6 +1389,10 @@ func (p *peerGroup) markPeerUnavailable(addr string) {
p.m.Lock()
defer p.m.Unlock()

p.markPeerUnavailableUnlocked(addr)
}

func (p *peerGroup) markPeerUnavailableUnlocked(addr string) {
state, ok := p.peerStates[addr]
if !ok {
state = &retryState{attempt: -1}
Expand Down

0 comments on commit 29831f8

Please sign in to comment.