|
|
@@ -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()
|
|
|
}
|
|
|
|