client.go | 6 +++--- client_test.go | 2 +- piece.go | 1 - reader.go | 2 +- t.go | 1 + torrent.go | 3 +-- diff --git a/client.go b/client.go index fea00be6a378bc24a0b8429a2d074c7ef8e1d1d6..2a923649c84e4f7ccd4856d917d9d8a49f165bf8 100644 --- a/client.go +++ b/client.go @@ -1923,7 +1923,7 @@ type TorrentDataOpener func(*metainfo.Info) Data func (cl *Client) setMetaData(t *torrent, md *metainfo.Info, bytes []byte) (err error) { - err = t.setMetadata(md, bytes, &cl.mu) + err = t.setMetadata(md, bytes) if err != nil { return } @@ -2590,7 +2590,7 @@ } c.peerTouchedPieces[int(req.Index)] = struct{}{} // log.Println("got chunk", req) - piece.Event.Broadcast() + me.event.Broadcast() defer t.publishPieceChange(int(req.Index)) // Record that we have the chunk. piece.unpendChunkIndex(chunkIndex(req.chunkSpec, t.chunkSize)) @@ -2662,7 +2662,7 @@ func (me *Client) pieceChanged(t *torrent, piece int) { correct := t.pieceComplete(piece) p := &t.Pieces[piece] defer t.publishPieceChange(piece) - defer p.Event.Broadcast() + defer me.event.Broadcast() if correct { p.Priority = PiecePriorityNone p.PendingChunkSpecs = nil diff --git a/client_test.go b/client_test.go index b7e4238a6eda662970b5c36927f3a649b63eabb2..b61d6b1bd91fc4656ed994cc2728c716be45e94c 100644 --- a/client_test.go +++ b/client_test.go @@ -99,7 +99,7 @@ if err != nil { t.Fatal(err) } tor.chunkSize = 2 - err = tor.setMetadata(&mi.Info.Info, mi.Info.Bytes, nil) + err = tor.setMetadata(&mi.Info.Info, mi.Info.Bytes) if err != nil { t.Fatal(err) } diff --git a/piece.go b/piece.go index 408dce376911ad73c0c469b9c1b953e047b2f80d..35c8a7b2ded8619f180889ba638006312bad900d 100644 --- a/piece.go +++ b/piece.go @@ -28,7 +28,6 @@ PendingChunkSpecs []bool Hashing bool QueuedForHash bool EverHashed bool - Event sync.Cond Priority piecePriority PublicPieceState PieceState diff --git a/reader.go b/reader.go index 0d2561d3de6166bdd8f6a9657fc26cb5f03168ed..e9f130ed00495c8161d03f5c7896505df48c089b 100644 --- a/reader.go +++ b/reader.go @@ -75,7 +75,7 @@ return } func (r *Reader) waitReadable(off int64) { - r.t.Pieces[off/int64(r.t.usualPieceSize())].Event.Wait() + r.t.cl.event.Wait() } func (r *Reader) ReadAt(b []byte, off int64) (n int, err error) { diff --git a/t.go b/t.go index 87ae5d82e5a26a7a4595ebd1ae03b90751cb6568..fcb57740f7287cc9367c7b329a47014e6be09a55 100644 --- a/t.go +++ b/t.go @@ -2,6 +2,7 @@ package torrent import ( "github.com/anacrolix/missinggo/pubsub" + "github.com/anacrolix/torrent/metainfo" ) diff --git a/torrent.go b/torrent.go index 7d3e235d34e9538d83a0027ac7c5749239926d7f..4d524a03e92829b3309a794a31bf7a64d8cc12af 100644 --- a/torrent.go +++ b/torrent.go @@ -232,7 +232,7 @@ return } // Called when metadata for a torrent becomes available. -func (t *torrent) setMetadata(md *metainfo.Info, infoBytes []byte, eventLocker sync.Locker) (err error) { +func (t *torrent) setMetadata(md *metainfo.Info, infoBytes []byte) (err error) { err = validateInfo(md) if err != nil { err = fmt.Errorf("bad info: %s", err) @@ -249,7 +249,6 @@ hashes := infoPieceHashes(md) t.Pieces = make([]piece, len(hashes)) for i, hash := range hashes { piece := &t.Pieces[i] - piece.Event.L = eventLocker piece.noPendingWrites.L = &piece.pendingWritesMutex missinggo.CopyExact(piece.Hash[:], hash) }