]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Fix a few minor data races
authorMatt Joiner <anacrolix@gmail.com>
Mon, 30 Mar 2015 12:10:37 +0000 (23:10 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 30 Mar 2015 12:10:37 +0000 (23:10 +1100)
client.go
data/blob/store.go

index f27db6a906635d1e2e69e7fa1f4315cd3064a17f..42d5ace3e79885a28802dd9e5664211b19ef7a4d 100644 (file)
--- 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) {
index ddfcd599230206f857b64102eda6945553ef8b50..b1b1139385cdc7ea782c141a842fefbbe1a8f6c0 100644 (file)
@@ -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