]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Fix some file permission issues
authorMatt Joiner <anacrolix@gmail.com>
Wed, 28 May 2025 05:26:49 +0000 (15:26 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 28 May 2025 05:26:49 +0000 (15:26 +1000)
storage/file-piece.go
storage/wrappers.go
torrent.go

index 2dc17233853d3cf0c7e8c6de5ca91049053f0fad..1f7491af2c342da2e420130b0b715f9afb88d44b 100644 (file)
@@ -238,7 +238,7 @@ func (me *filePieceImpl) onFileNotComplete(f file) (err error) {
                return
        }
        // Ensure the file is writable
-       err = os.Chmod(f.safeOsPath, info.Mode().Perm()|(filePerm&0o222))
+       err = os.Chmod(me.pathForWrite(f), info.Mode().Perm()|(filePerm&0o222))
        if err != nil {
                err = fmt.Errorf("setting file writable: %w", err)
                return
index 2d42d059edb7265d3b653039d0c712f3ee6f8322..bcb9d21ec588b1fd4ac139816d81c099fe22e63d 100644 (file)
@@ -123,6 +123,7 @@ func (p Piece) ReadAt(b []byte, off int64) (n int, err error) {
        // to return if the data has been lost.
        if off < p.mip.Length() {
                if err == io.EOF {
+                       // TODO: Hey, this guy over here isn't checking errors.
                        p.MarkNotComplete()
                }
        }
index c1769355dc0e9a0cfeef0ce3f3a53fc86ac7cc88..2f9d42e2b331fa6fc671ba52291322638c47ac22 100644 (file)
@@ -2570,8 +2570,20 @@ func (t *Torrent) pieceHashed(piece pieceIndex, passed bool, hashIoErr error) {
                                }
                        }
                }
+
+               // This pattern is copied from MarkComplete above. Note the pattern.
+               t.cl.unlock()
+               p.race++
+               err := p.Storage().MarkNotComplete()
+               if err != nil {
+                       t.slogger().Error("error marking piece not complete", "piece", piece, "err", err)
+               }
+               t.cl.lock()
+               if t.closed.IsSet() {
+                       return
+               }
+
                t.onIncompletePiece(piece)
-               p.Storage().MarkNotComplete()
        }
        t.updatePieceCompletion(piece)
 }