From ad70dcdbf4f8bea06e232b38ef895efd1199279b Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Thu, 2 Sep 2021 20:54:22 +1000 Subject: [PATCH] Return error on sqlite PieceCompletion.Set when closed --- storage/sqlite-piece-completion.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/storage/sqlite-piece-completion.go b/storage/sqlite-piece-completion.go index 857b97a2..5f31e413 100644 --- a/storage/sqlite-piece-completion.go +++ b/storage/sqlite-piece-completion.go @@ -4,18 +4,19 @@ package storage import ( + "errors" "path/filepath" "sync" "crawshaw.io/sqlite" "crawshaw.io/sqlite/sqlitex" - "github.com/anacrolix/torrent/metainfo" ) type sqlitePieceCompletion struct { - mu sync.Mutex - db *sqlite.Conn + mu sync.Mutex + closed bool + db *sqlite.Conn } var _ PieceCompletion = (*sqlitePieceCompletion)(nil) @@ -52,6 +53,9 @@ func (me *sqlitePieceCompletion) Get(pk metainfo.PieceKey) (c Completion, err er func (me *sqlitePieceCompletion) Set(pk metainfo.PieceKey, b bool) error { me.mu.Lock() defer me.mu.Unlock() + if me.closed { + return errors.New("closed") + } return sqlitex.Exec( me.db, `insert or replace into piece_completion(infohash, "index", complete) values(?, ?, ?)`, @@ -62,9 +66,11 @@ func (me *sqlitePieceCompletion) Set(pk metainfo.PieceKey, b bool) error { func (me *sqlitePieceCompletion) Close() (err error) { me.mu.Lock() defer me.mu.Unlock() - if me.db != nil { - err = me.db.Close() - me.db = nil + if me.closed { + return } + err = me.db.Close() + me.db = nil + me.closed = true return } -- 2.50.0