]> Sergey Matveev's repositories - btrtrc.git/blobdiff - file.go
Fixes for storage tests on Windows
[btrtrc.git] / file.go
diff --git a/file.go b/file.go
index 45defe6e87cbdc3714990da10f6d8383a95b6a6f..ed2f5da9ced0e74c87a903d1b160a3793331701d 100644 (file)
--- a/file.go
+++ b/file.go
@@ -44,13 +44,14 @@ func (f *File) Length() int64 {
 
 // Number of bytes of the entire file we have completed. This is the sum of
 // completed pieces, and dirtied chunks of incomplete pieces.
-func (f *File) BytesCompleted() int64 {
+func (f *File) BytesCompleted() (n int64) {
        f.t.cl.rLock()
-       defer f.t.cl.rUnlock()
-       return f.bytesCompleted()
+       n = f.bytesCompletedLocked()
+       f.t.cl.rUnlock()
+       return
 }
 
-func (f *File) bytesCompleted() int64 {
+func (f *File) bytesCompletedLocked() int64 {
        return f.length - f.bytesLeft()
 }
 
@@ -85,7 +86,7 @@ func fileBytesLeft(
 }
 
 func (f *File) bytesLeft() (left int64) {
-       return fileBytesLeft(int64(f.t.usualPieceSize()), f.firstPieceIndex(), f.endPieceIndex(), f.offset, f.length, &f.t._completedPieces)
+       return fileBytesLeft(int64(f.t.usualPieceSize()), f.BeginPieceIndex(), f.EndPieceIndex(), f.offset, f.length, &f.t._completedPieces)
 }
 
 // The relative file path for a multi-file torrent, and the torrent name for a
@@ -140,37 +141,29 @@ func (f *File) Cancel() {
 }
 
 func (f *File) NewReader() Reader {
-       tr := reader{
-               mu:        f.t.cl.locker(),
-               t:         f.t,
-               readahead: 5 * 1024 * 1024,
-               offset:    f.Offset(),
-               length:    f.Length(),
-       }
-       f.t.addReader(&tr)
-       return &tr
+       return f.t.newReader(f.Offset(), f.Length())
 }
 
 // Sets the minimum priority for pieces in the File.
 func (f *File) SetPriority(prio piecePriority) {
        f.t.cl.lock()
-       defer f.t.cl.unlock()
-       if prio == f.prio {
-               return
+       if prio != f.prio {
+               f.prio = prio
+               f.t.updatePiecePriorities(f.BeginPieceIndex(), f.EndPieceIndex(), "File.SetPriority")
        }
-       f.prio = prio
-       f.t.updatePiecePriorities(f.firstPieceIndex(), f.endPieceIndex())
+       f.t.cl.unlock()
 }
 
 // Returns the priority per File.SetPriority.
-func (f *File) Priority() piecePriority {
-       f.t.cl.lock()
-       defer f.t.cl.unlock()
-       return f.prio
+func (f *File) Priority() (prio piecePriority) {
+       f.t.cl.rLock()
+       prio = f.prio
+       f.t.cl.rUnlock()
+       return
 }
 
 // Returns the index of the first piece containing data for the file.
-func (f *File) firstPieceIndex() pieceIndex {
+func (f *File) BeginPieceIndex() int {
        if f.t.usualPieceSize() == 0 {
                return 0
        }
@@ -178,7 +171,7 @@ func (f *File) firstPieceIndex() pieceIndex {
 }
 
 // Returns the index of the piece after the last one containing data for the file.
-func (f *File) endPieceIndex() pieceIndex {
+func (f *File) EndPieceIndex() int {
        if f.t.usualPieceSize() == 0 {
                return 0
        }