]> Sergey Matveev's repositories - btrtrc.git/commitdiff
data/blob: Tidy error handling in WriteSectionTo
authorMatt Joiner <anacrolix@gmail.com>
Wed, 20 May 2015 12:21:20 +0000 (22:21 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 20 May 2015 12:21:20 +0000 (22:21 +1000)
data/blob/blob.go
data/blob/store.go

index d0741ed6f3446274cba852db360d4393cab71504..0afc047bc652343aeb3eed91af5401711e940479 100644 (file)
@@ -100,11 +100,7 @@ func (me *data) WriteSectionTo(w io.Writer, off, n int64) (written int64, err er
                var pr io.ReadCloser
                pr, err = me.pieceReader(i, off)
                if err != nil {
-                       if err == io.EOF {
-                               err = nil
-                       }
                        return
-                       pr.Close()
                }
                var n1 int64
                n1, err = io.CopyN(w, pr, n)
index 662e8cc8c103932a75f83385669e790e3d0c4761..06ff2f7a15a9e97ac86231d62298f6595f127a42 100644 (file)
@@ -122,6 +122,8 @@ func (me *store) pieceWrite(p metainfo.Piece) (f *os.File) {
        return
 }
 
+// Returns the file for the given piece, if it exists. It could be completed,
+// or incomplete.
 func (me *store) pieceRead(p metainfo.Piece) (f *os.File) {
        me.mu.Lock()
        defer me.mu.Unlock()
@@ -132,9 +134,9 @@ func (me *store) pieceRead(p metainfo.Piece) (f *os.File) {
        if !os.IsNotExist(err) {
                panic(err)
        }
-       // Ermahgerd, self heal. This occurs when the underlying data goes
-       // missing, likely due to a "cache flush", also known as deleting the
-       // files. TODO: Trigger an asynchronous initCompleted.
+       // Mark the file not completed, in case we thought it was. TODO: Trigger
+       // an asynchronous initCompleted to reinitialize the entire completed map
+       // as there are likely other files missing.
        delete(me.completed, sliceToPieceHashArray(p.Hash()))
        f, err = os.Open(me.path(p, false))
        if err == nil {