Skip to content
This repository has been archived by the owner on Aug 19, 2022. It is now read-only.

Commit

Permalink
Merge pull request #161 from libp2p/fix/races
Browse files Browse the repository at this point in the history
fix: fix some race conditions in the ds address book
  • Loading branch information
Stebalien committed Jul 17, 2021
2 parents 68d396b + 2c64af2 commit 87136c9
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions pstoreds/addr_book.go
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,16 @@ func (ab *dsAddrBook) ConsumePeerRecord(recordEnvelope *record.Envelope, ttl tim

func (ab *dsAddrBook) latestPeerRecordSeq(p peer.ID) uint64 {
pr, err := ab.loadRecord(p, true, false)
if err != nil || len(pr.Addrs) == 0 || pr.CertifiedRecord == nil || len(pr.CertifiedRecord.Raw) == 0 {
if err != nil {
// We ignore the error because we don't want to fail storing a new record in this
// case.
log.Errorw("unable to load record", "peer", p, "error", err)
return 0
}
pr.RLock()
defer pr.RUnlock()

if len(pr.Addrs) == 0 || pr.CertifiedRecord == nil || len(pr.CertifiedRecord.Raw) == 0 {
return 0
}
return pr.CertifiedRecord.Seq
Expand Down Expand Up @@ -552,13 +561,13 @@ func (ab *dsAddrBook) deleteAddrs(p peer.ID, addrs []ma.Multiaddr) (err error) {
return fmt.Errorf("failed to load peerstore entry for peer %v while deleting addrs, err: %v", p, err)
}

pr.Lock()
defer pr.Unlock()

if pr.Addrs == nil {
return nil
}

pr.Lock()
defer pr.Unlock()

pr.Addrs = deleteInPlace(pr.Addrs, addrs)

pr.dirty = true
Expand Down

0 comments on commit 87136c9

Please sign in to comment.