From c3768da38c5235d206de173670baca7fdeda2b51 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 5 May 2021 12:38:26 +1000 Subject: [PATCH] Use sync.Map in map piece completion --- storage/map-piece-completion.go | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/storage/map-piece-completion.go b/storage/map-piece-completion.go index 52c57e98..5f7f87ef 100644 --- a/storage/map-piece-completion.go +++ b/storage/map-piece-completion.go @@ -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 } -- 2.48.1