storage/map-piece-completion.go | 21 ++++++++------------- diff --git a/storage/map-piece-completion.go b/storage/map-piece-completion.go index 52c57e98ac7ff3baada22d2244d9dcc8ce95519c..5f7f87eff31dc49d965baac40c5e022786bd58e5 100644 --- a/storage/map-piece-completion.go +++ b/storage/map-piece-completion.go @@ -7,32 +7,27 @@ "github.com/anacrolix/torrent/metainfo" ) type mapPieceCompletion struct { - // TODO: Can probably improve the synchronization here. - mu sync.Mutex - m map[metainfo.PieceKey]bool + m sync.Map } var _ PieceCompletion = (*mapPieceCompletion)(nil) func NewMapPieceCompletion() PieceCompletion { - return &mapPieceCompletion{m: make(map[metainfo.PieceKey]bool)} + return &mapPieceCompletion{} } func (*mapPieceCompletion) Close() error { return nil } func (me *mapPieceCompletion) Get(pk metainfo.PieceKey) (c Completion, err error) { - me.mu.Lock() - defer me.mu.Unlock() - c.Complete, c.Ok = me.m[pk] + v, ok := me.m.Load(pk) + if ok { + c.Complete = v.(bool) + } + c.Ok = ok return } func (me *mapPieceCompletion) Set(pk metainfo.PieceKey, b bool) error { - me.mu.Lock() - defer me.mu.Unlock() - if me.m == nil { - me.m = make(map[metainfo.PieceKey]bool) - } - me.m[pk] = b + me.m.Store(pk, b) return nil }