From: Matt Joiner Date: Wed, 28 May 2025 05:26:49 +0000 (+1000) Subject: Fix some file permission issues X-Git-Tag: v1.59.0~101 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=af20adabd0f5c190b82b71f296691ec09ce38d9c;p=btrtrc.git Fix some file permission issues --- diff --git a/storage/file-piece.go b/storage/file-piece.go index 2dc17233..1f7491af 100644 --- a/storage/file-piece.go +++ b/storage/file-piece.go @@ -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 diff --git a/storage/wrappers.go b/storage/wrappers.go index 2d42d059..bcb9d21e 100644 --- a/storage/wrappers.go +++ b/storage/wrappers.go @@ -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() } } diff --git a/torrent.go b/torrent.go index c1769355..2f9d42e2 100644 --- a/torrent.go +++ b/torrent.go @@ -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) }