From 1ce84f664efce143409c2f384e844e54e26e5b4d Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Mon, 30 Mar 2015 23:10:37 +1100 Subject: [PATCH] Fix a few minor data races --- client.go | 5 ++++- data/blob/store.go | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/client.go b/client.go index f27db6a9..42d5ace3 100644 --- a/client.go +++ b/client.go @@ -773,7 +773,10 @@ func (me *Client) initiateConn(peer Peer, t *torrent) { } func (me *Client) dialTimeout(t *torrent) time.Duration { - return reducedDialTimeout(nominalDialTimeout, me.halfOpenLimit, len(t.Peers)) + me.mu.Lock() + pendingPeers := len(t.Peers) + me.mu.Unlock() + return reducedDialTimeout(nominalDialTimeout, me.halfOpenLimit, pendingPeers) } func (me *Client) dialTCP(addr string, t *torrent) (c net.Conn, err error) { diff --git a/data/blob/store.go b/data/blob/store.go index ddfcd599..b1b11393 100644 --- a/data/blob/store.go +++ b/data/blob/store.go @@ -10,6 +10,7 @@ import ( "os" "path/filepath" "sort" + "sync" "time" "github.com/anacrolix/libtorgo/metainfo" @@ -23,8 +24,10 @@ const ( ) type store struct { - baseDir string - capacity int64 + baseDir string + capacity int64 + + mu sync.Mutex completed map[[20]byte]struct{} } @@ -41,7 +44,7 @@ func Capacity(bytes int64) StoreOption { } func NewStore(baseDir string, opt ...StoreOption) dataPkg.Store { - s := &store{baseDir, -1, nil} + s := &store{baseDir, -1, sync.Mutex{}, nil} for _, o := range opt { o(s) } @@ -118,6 +121,8 @@ func (me *store) pieceWrite(p metainfo.Piece) (f *os.File) { } func (me *store) pieceRead(p metainfo.Piece) (f *os.File) { + me.mu.Lock() + defer me.mu.Unlock() f, err := os.Open(me.path(p, true)) if err == nil { return -- 2.48.1