From: Matt Joiner Date: Thu, 2 Sep 2021 10:54:22 +0000 (+1000) Subject: Return error on sqlite PieceCompletion.Set when closed X-Git-Tag: v1.32.0~98 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=ad70dcdbf4f8bea06e232b38ef895efd1199279b;p=btrtrc.git Return error on sqlite PieceCompletion.Set when closed --- 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 }