]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Use sync.Map in map piece completion
authorMatt Joiner <anacrolix@gmail.com>
Wed, 5 May 2021 02:38:26 +0000 (12:38 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 5 May 2021 02:38:26 +0000 (12:38 +1000)
storage/map-piece-completion.go

index 52c57e98ac7ff3baada22d2244d9dcc8ce95519c..5f7f87eff31dc49d965baac40c5e022786bd58e5 100644 (file)
@@ -7,32 +7,27 @@ import (
 )
 
 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
 }