aboutsummaryrefslogtreecommitdiffstats
path: root/eth/downloader/downloader.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2015-05-13 19:01:08 +0800
committerPéter Szilágyi <peterke@gmail.com>2015-05-13 19:01:08 +0800
commitec57aa64cda2e525687641971a54df15a04362d6 (patch)
tree4072c9abe5e0361dcd189e3f16e78099c32a0659 /eth/downloader/downloader.go
parentee0c8923035f44a44cfc9120255b807e90baada9 (diff)
downloadgo-tangerine-ec57aa64cda2e525687641971a54df15a04362d6.tar.gz
go-tangerine-ec57aa64cda2e525687641971a54df15a04362d6.tar.zst
go-tangerine-ec57aa64cda2e525687641971a54df15a04362d6.zip
eth/downloader: sync the cancel channel during cancel too
Diffstat (limited to 'eth/downloader/downloader.go')
-rw-r--r--eth/downloader/downloader.go25
1 files changed, 4 insertions, 21 deletions
diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go
index 04e9c3a21..0cbf42d30 100644
--- a/eth/downloader/downloader.go
+++ b/eth/downloader/downloader.go
@@ -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()