]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Fix Torrent.Drop to wait for storage close without client lock
authorMatt Joiner <anacrolix@gmail.com>
Fri, 10 Sep 2021 04:14:57 +0000 (14:14 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Sat, 11 Sep 2021 01:39:33 +0000 (11:39 +1000)
client.go
t.go

index fe83190072738e63f9a63670befe47b97790fd30..0de33272c20fcb842da268c888ef0861debd3fc5 100644 (file)
--- a/client.go
+++ b/client.go
@@ -1258,15 +1258,13 @@ func useTorrentSource(ctx context.Context, source string, t *Torrent) (err error
        return t.MergeSpec(TorrentSpecFromMetaInfo(&mi))
 }
 
-func (cl *Client) dropTorrent(infoHash metainfo.Hash) (err error) {
+func (cl *Client) dropTorrent(infoHash metainfo.Hash, wg *sync.WaitGroup) (err error) {
        t, ok := cl.torrents[infoHash]
        if !ok {
                err = fmt.Errorf("no such torrent")
                return
        }
-       var wg sync.WaitGroup
-       defer wg.Wait()
-       err = t.close(&wg)
+       err = t.close(wg)
        if err != nil {
                panic(err)
        }
diff --git a/t.go b/t.go
index ebb328835deaa3cfa8f42ba7346b9d5ffcc4e4a4..153264e928d5c62823c0ff222bb65f39f82dc7be 100644 (file)
--- a/t.go
+++ b/t.go
@@ -5,6 +5,7 @@ import (
        "strings"
 
        "github.com/anacrolix/missinggo/pubsub"
+       "github.com/anacrolix/sync"
 
        "github.com/anacrolix/torrent/metainfo"
 )
@@ -95,9 +96,11 @@ func (t *Torrent) PieceBytesMissing(piece int) int64 {
 // this. No data corruption can, or should occur to either the torrent's data,
 // or connected peers.
 func (t *Torrent) Drop() {
+       var wg sync.WaitGroup
+       defer wg.Wait()
        t.cl.lock()
        defer t.cl.unlock()
-       t.cl.dropTorrent(t.infoHash)
+       t.cl.dropTorrent(t.infoHash, &wg)
 }
 
 // Number of bytes of the entire torrent we have completed. This is the sum of