Simplify (*Torrent).gotMetainfo (#581)
This commit is contained in:
parent
1bb6724020
commit
5c440e8929
@ -1112,6 +1112,7 @@ func (cl *Client) newTorrent(ih metainfo.Hash, specStorage storage.ClientImpl) (
|
||||
L: cl.locker(),
|
||||
},
|
||||
webSeeds: make(map[string]*Peer),
|
||||
gotMetainfoC: make(chan struct{}),
|
||||
}
|
||||
t.networkingEnabled.Set()
|
||||
t._pendingPieces.NewSet = priorityBitmapStableNewSet
|
||||
|
18
t.go
18
t.go
@ -16,18 +16,20 @@ func (t *Torrent) InfoHash() metainfo.Hash {
|
||||
}
|
||||
|
||||
// Returns a channel that is closed when the info (.Info()) for the torrent has become available.
|
||||
func (t *Torrent) GotInfo() <-chan struct{} {
|
||||
func (t *Torrent) GotInfo() (ret <-chan struct{}) {
|
||||
// TODO: We shouldn't need to lock to take a channel here, if the event is only ever set.
|
||||
t.cl.lock()
|
||||
defer t.cl.unlock()
|
||||
return t.gotMetainfo.C()
|
||||
t.nameMu.RLock()
|
||||
ret = t.gotMetainfoC
|
||||
t.nameMu.RUnlock()
|
||||
return
|
||||
}
|
||||
|
||||
// Returns the metainfo info dictionary, or nil if it's not yet available.
|
||||
func (t *Torrent) Info() *metainfo.Info {
|
||||
t.cl.lock()
|
||||
defer t.cl.unlock()
|
||||
return t.info
|
||||
func (t *Torrent) Info() (info *metainfo.Info) {
|
||||
t.nameMu.RLock()
|
||||
info = t.info
|
||||
t.nameMu.RUnlock()
|
||||
return
|
||||
}
|
||||
|
||||
// Returns a Reader bound to the torrent's data. All read calls block until the data requested is
|
||||
|
@ -122,8 +122,8 @@ type Torrent struct {
|
||||
metadataCompletedChunks []bool
|
||||
metadataChanged sync.Cond
|
||||
|
||||
// Set when .Info is obtained.
|
||||
gotMetainfo missinggo.Event
|
||||
// Closed when .Info is obtained.
|
||||
gotMetainfoC chan struct{}
|
||||
|
||||
readers map[*reader]struct{}
|
||||
_readerNowPieces bitmap.Bitmap
|
||||
@ -305,10 +305,11 @@ func (t *Torrent) addPeer(p PeerInfo) (added bool) {
|
||||
}
|
||||
|
||||
func (t *Torrent) invalidateMetadata() {
|
||||
for i := range t.metadataCompletedChunks {
|
||||
for i := 0; i < len(t.metadataCompletedChunks); i++ {
|
||||
t.metadataCompletedChunks[i] = false
|
||||
}
|
||||
t.nameMu.Lock()
|
||||
t.gotMetainfoC = make(chan struct{})
|
||||
t.info = nil
|
||||
t.nameMu.Unlock()
|
||||
}
|
||||
@ -438,7 +439,7 @@ func (t *Torrent) onSetInfo() {
|
||||
}
|
||||
}
|
||||
t.cl.event.Broadcast()
|
||||
t.gotMetainfo.Set()
|
||||
close(t.gotMetainfoC)
|
||||
t.updateWantPeersEvent()
|
||||
t.pendingRequests = make(map[Request]int)
|
||||
t.tryCreateMorePieceHashers()
|
||||
|
Loading…
x
Reference in New Issue
Block a user