]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Return error on sqlite PieceCompletion.Set when closed
authorMatt Joiner <anacrolix@gmail.com>
Thu, 2 Sep 2021 10:54:22 +0000 (20:54 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Sat, 4 Sep 2021 13:07:32 +0000 (23:07 +1000)
storage/sqlite-piece-completion.go

index 857b97a2b9243db2acb993fecb0ba6d8c9a74cfc..5f31e41377f0fcb79e2accc59cb9dc57ad99bdb0 100644 (file)
@@ -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
 }