From: Matt Joiner Date: Fri, 10 Sep 2021 04:14:57 +0000 (+1000) Subject: Fix Torrent.Drop to wait for storage close without client lock X-Git-Tag: v1.32.0~75 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=7378d50a3cb1d1fbf104b368c028f58c6978ba77;p=btrtrc.git Fix Torrent.Drop to wait for storage close without client lock --- diff --git a/client.go b/client.go index fe831900..0de33272 100644 --- 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 ebb32883..153264e9 100644 --- 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