}
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) {
"os"
"path/filepath"
"sort"
+ "sync"
"time"
"github.com/anacrolix/libtorgo/metainfo"
)
type store struct {
- baseDir string
- capacity int64
+ baseDir string
+ capacity int64
+
+ mu sync.Mutex
completed map[[20]byte]struct{}
}
}
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)
}
}
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