Commit 7cf83cee authored by Domino Valdano's avatar Domino Valdano Committed by Péter Szilágyi

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

parent 744428cb
...@@ -306,7 +306,7 @@ func (d *Downloader) UnregisterPeer(id string) error { ...@@ -306,7 +306,7 @@ func (d *Downloader) UnregisterPeer(id string) error {
d.cancelLock.RUnlock() d.cancelLock.RUnlock()
if master { if master {
d.Cancel() d.cancel()
} }
return nil return nil
} }
...@@ -501,8 +501,10 @@ func (d *Downloader) spawnSync(fetchers []func() error) error { ...@@ -501,8 +501,10 @@ func (d *Downloader) spawnSync(fetchers []func() error) error {
return err return err
} }
// Cancel cancels all of the operations and resets the queue. // cancel aborts all of the operations and resets the queue. However, cancel does
func (d *Downloader) Cancel() { // 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 // Close the current cancel channel
d.cancelLock.Lock() d.cancelLock.Lock()
if d.cancelCh != nil { if d.cancelCh != nil {
...@@ -514,6 +516,12 @@ func (d *Downloader) Cancel() { ...@@ -514,6 +516,12 @@ func (d *Downloader) Cancel() {
} }
} }
d.cancelLock.Unlock() 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() d.cancelWg.Wait()
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment