Browse Source

eth: fix shutdown regression to abort downloads, not just cancel

Péter Szilágyi 5 năm trước cách đây
mục cha
commit
b0bbd47185
2 tập tin đã thay đổi với 3 bổ sung2 xóa
  1. 2 1
      eth/downloader/downloader.go
  2. 1 1
      eth/sync.go

+ 2 - 1
eth/downloader/downloader.go

@@ -557,6 +557,8 @@ func (d *Downloader) spawnSync(fetchers []func() error) error {
 func (d *Downloader) cancel() {
 	// Close the current cancel channel
 	d.cancelLock.Lock()
+	defer d.cancelLock.Unlock()
+
 	if d.cancelCh != nil {
 		select {
 		case <-d.cancelCh:
@@ -565,7 +567,6 @@ func (d *Downloader) cancel() {
 			close(d.cancelCh)
 		}
 	}
-	d.cancelLock.Unlock()
 }
 
 // Cancel aborts all of the operations and waits for all download goroutines to

+ 1 - 1
eth/sync.go

@@ -222,7 +222,7 @@ func (cs *chainSyncer) loop() {
 
 		case <-cs.pm.quitSync:
 			if cs.doneCh != nil {
-				cs.pm.downloader.Cancel()
+				cs.pm.downloader.Terminate() // Double term is fine, Cancel would block until queue is emptied
 				<-cs.doneCh
 			}
 			return