File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -248,13 +248,18 @@ func (m *Manager) Cancel(id int) bool {
248248 defer m .mu .Unlock ()
249249
250250 for _ , item := range m .items {
251- if item .ID == id && (item .Status == StatusQueued || item .Status == StatusPreparing || item .Status == StatusDownloading ) {
252- if item .cancel != nil {
253- item .cancel ()
251+ if item .ID == id {
252+ item .mu .Lock ()
253+ canCancel := item .Status == StatusQueued || item .Status == StatusPreparing || item .Status == StatusDownloading
254+ if canCancel {
255+ if item .cancel != nil {
256+ item .cancel ()
257+ }
258+ item .Status = StatusCancelled
259+ m .persistStatus (item .ID , item .Status )
254260 }
255- item .Status = StatusCancelled
256- m .persistStatus (item .ID , item .Status )
257- return true
261+ item .mu .Unlock ()
262+ return canCancel
258263 }
259264 }
260265 return false
@@ -264,9 +269,14 @@ func (m *Manager) Retry(id int) bool {
264269 m .mu .Lock ()
265270 var item * Item
266271 for _ , it := range m .items {
267- if it .ID == id && it .Status == StatusFailed {
268- item = it
269- break
272+ if it .ID == id {
273+ it .mu .Lock ()
274+ if it .Status == StatusFailed {
275+ item = it
276+ it .mu .Unlock ()
277+ break
278+ }
279+ it .mu .Unlock ()
270280 }
271281 }
272282 m .mu .Unlock ()
@@ -342,9 +352,9 @@ func (m *Manager) worker() {
342352}
343353
344354func (m * Manager ) process (item * Item ) {
345- m .mu .Lock ()
355+ item .mu .Lock ()
346356 if item .Status != StatusQueued {
347- m .mu .Unlock ()
357+ item .mu .Unlock ()
348358 return
349359 }
350360 item .Status = StatusPreparing
@@ -353,7 +363,7 @@ func (m *Manager) process(item *Item) {
353363 item .cancel = cancel
354364 now := time .Now ()
355365 item .StartedAt = & now
356- m .mu .Unlock ()
366+ item .mu .Unlock ()
357367
358368 item .mu .Lock ()
359369 item .Status = StatusDownloading
You can’t perform that action at this time.
0 commit comments