forked from cerc-io/plugeth
eth/downloader: sync the cancel channel during cancel too
This commit is contained in:
parent
ee0c892303
commit
ec57aa64cd
@ -190,32 +190,15 @@ func (d *Downloader) syncWithPeer(p *peer, hash common.Hash) (err error) {
|
||||
// Cancel cancels all of the operations and resets the queue. It returns true
|
||||
// if the cancel operation was completed.
|
||||
func (d *Downloader) Cancel() bool {
|
||||
hs, bs := d.queue.Size()
|
||||
// If we're not syncing just return.
|
||||
hs, bs := d.queue.Size()
|
||||
if atomic.LoadInt32(&d.synchronising) == 0 && hs == 0 && bs == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
// Close the current cancel channel
|
||||
d.cancelLock.RLock()
|
||||
close(d.cancelCh)
|
||||
|
||||
// clean up
|
||||
hashDone:
|
||||
for {
|
||||
select {
|
||||
case <-d.hashCh:
|
||||
default:
|
||||
break hashDone
|
||||
}
|
||||
}
|
||||
|
||||
blockDone:
|
||||
for {
|
||||
select {
|
||||
case <-d.blockCh:
|
||||
default:
|
||||
break blockDone
|
||||
}
|
||||
}
|
||||
d.cancelLock.RUnlock()
|
||||
|
||||
// reset the queue
|
||||
d.queue.Reset()
|
||||
|
Loading…
Reference in New Issue
Block a user