Ver código fonte

eth/downloader: fix for Issue #16539 (#16546)

Domino Valdano 7 anos atrás
pai
commit
7cf83cee52
1 arquivos alterados com 11 adições e 3 exclusões
  1. 11 3
      eth/downloader/downloader.go

+ 11 - 3
eth/downloader/downloader.go

@@ -306,7 +306,7 @@ func (d *Downloader) UnregisterPeer(id string) error {
 	d.cancelLock.RUnlock()
 
 	if master {
-		d.Cancel()
+		d.cancel()
 	}
 	return nil
 }
@@ -501,8 +501,10 @@ func (d *Downloader) spawnSync(fetchers []func() error) error {
 	return err
 }
 
-// Cancel cancels all of the operations and resets the queue.
-func (d *Downloader) Cancel() {
+// cancel aborts all of the operations and resets the queue. However, cancel does
+// not wait for the running download goroutines to finish. This method should be
+// used when cancelling the downloads from inside the downloader.
+func (d *Downloader) cancel() {
 	// Close the current cancel channel
 	d.cancelLock.Lock()
 	if d.cancelCh != nil {
@@ -514,6 +516,12 @@ func (d *Downloader) Cancel() {
 		}
 	}
 	d.cancelLock.Unlock()
+}
+
+// Cancel aborts all of the operations and waits for all download goroutines to
+// finish before returning.
+func (d *Downloader) Cancel() {
+	d.cancel()
 	d.cancelWg.Wait()
 }