eth/downloader: fix issue #16539 (#16546)

This commit is contained in:
Daniel Liu 2025-02-11 16:35:07 +08:00
parent 3ebf97e721
commit 652c66e9d4

View file

@ -313,7 +313,7 @@ func (d *Downloader) UnregisterPeer(id string) error {
d.cancelLock.RUnlock()
if master {
d.Cancel()
d.cancel()
}
return nil
}
@ -511,8 +511,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 {
@ -524,6 +526,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()
}