From 11a53fa732406aea61681005773792aee211c4ad Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Sat, 9 Jul 2016 00:36:32 +1000 Subject: [PATCH] Fix issue #95: Closing torrent storage also closed client storage for some storage types --- storage/file.go | 24 +++++++++++++----------- storage/mmap.go | 8 +++----- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/storage/file.go b/storage/file.go index 15f7ebdb..257d92a3 100644 --- a/storage/file.go +++ b/storage/file.go @@ -14,48 +14,50 @@ import ( // File-based storage for torrents, that isn't yet bound to a particular // torrent. type fileStorage struct { - baseDir string - completion pieceCompletion + baseDir string } func NewFile(baseDir string) Client { return &fileStorage{ - baseDir: baseDir, - completion: pieceCompletionForDir(baseDir), + baseDir: baseDir, } } func (fs *fileStorage) OpenTorrent(info *metainfo.InfoEx) (Torrent, error) { - return fileTorrentStorage{fs}, nil + return &fileTorrentStorage{ + fs, + pieceCompletionForDir(fs.baseDir), + }, nil } // File-based torrent storage, not yet bound to a Torrent. type fileTorrentStorage struct { - *fileStorage + fs *fileStorage + completion pieceCompletion } -func (fs *fileStorage) Piece(p metainfo.Piece) Piece { +func (fts *fileTorrentStorage) Piece(p metainfo.Piece) Piece { // Create a view onto the file-based torrent storage. _io := &fileStorageTorrent{ p.Info, - fs.baseDir, + fts.fs.baseDir, } // Return the appropriate segments of this. return &fileStoragePiece{ - fs, + fts, p, missinggo.NewSectionWriter(_io, p.Offset(), p.Length()), io.NewSectionReader(_io, p.Offset(), p.Length()), } } -func (fs *fileStorage) Close() error { +func (fs *fileTorrentStorage) Close() error { fs.completion.Close() return nil } type fileStoragePiece struct { - *fileStorage + *fileTorrentStorage p metainfo.Piece io.WriterAt io.ReaderAt diff --git a/storage/mmap.go b/storage/mmap.go index d3f9235a..836b6f0f 100644 --- a/storage/mmap.go +++ b/storage/mmap.go @@ -14,14 +14,12 @@ import ( ) type mmapStorage struct { - baseDir string - completion pieceCompletion + baseDir string } func NewMMap(baseDir string) Client { return &mmapStorage{ - baseDir: baseDir, - completion: pieceCompletionForDir(baseDir), + baseDir: baseDir, } } @@ -29,7 +27,7 @@ func (s *mmapStorage) OpenTorrent(info *metainfo.InfoEx) (t Torrent, err error) span, err := mMapTorrent(&info.Info, s.baseDir) t = &mmapTorrentStorage{ span: span, - pc: s.completion, + pc: pieceCompletionForDir(s.baseDir), } return } -- 2.48.1