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

addrbook: fix races #154

Merged
merged 2 commits into from Jun 5, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 7 additions & 2 deletions pstoreds/addr_book.go
Expand Up @@ -3,11 +3,12 @@ package pstoreds
import (
"context"
"fmt"
"github.com/libp2p/go-libp2p-core/record"
"sort"
"sync"
"time"

"github.com/libp2p/go-libp2p-core/record"

ds "github.com/ipfs/go-datastore"
"github.com/ipfs/go-datastore/query"
logging "github.com/ipfs/go-log"
Expand All @@ -17,7 +18,7 @@ import (
pb "github.com/libp2p/go-libp2p-peerstore/pb"
"github.com/libp2p/go-libp2p-peerstore/pstoremem"

"github.com/hashicorp/golang-lru"
lru "github.com/hashicorp/golang-lru"
b32 "github.com/multiformats/go-base32"
ma "github.com/multiformats/go-multiaddr"
)
Expand Down Expand Up @@ -316,6 +317,8 @@ func (ab *dsAddrBook) storeSignedPeerRecord(p peer.ID, envelope *record.Envelope
if err != nil {
return err
}
pr.Lock()
defer pr.Unlock()
pr.CertifiedRecord = &pb.AddrBookRecord_CertifiedRecord{
Seq: rec.Seq,
Raw: envelopeBytes,
Expand All @@ -334,6 +337,8 @@ func (ab *dsAddrBook) GetPeerRecord(p peer.ID) *record.Envelope {
log.Errorf("unable to load record for peer %s: %v", p.Pretty(), err)
return nil
}
pr.RLock()
defer pr.RUnlock()
vyzo marked this conversation as resolved.
Show resolved Hide resolved
if pr.CertifiedRecord == nil || len(pr.CertifiedRecord.Raw) == 0 || len(pr.Addrs) == 0 {
return nil
}
Expand Down