storage/sqlite-piece-completion.go | 18 ++++++++++++------ diff --git a/storage/sqlite-piece-completion.go b/storage/sqlite-piece-completion.go index 857b97a2b9243db2acb993fecb0ba6d8c9a74cfc..5f31e41377f0fcb79e2accc59cb9dc57ad99bdb0 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) 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) 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 }