mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-05-06 22:18:28 +00:00
consumer: make sure list is unlocked before queueing
This commit is contained in:
+7
-1
@@ -70,19 +70,25 @@ func (list *List) consumer() {
|
|||||||
task.wgTask.Done()
|
task.wgTask.Done()
|
||||||
list.wg.Done()
|
list.wg.Done()
|
||||||
|
|
||||||
|
unlocked := false
|
||||||
for _, t := range list.tasks {
|
for _, t := range list.tasks {
|
||||||
if t.State == IDLE {
|
if t.State == IDLE {
|
||||||
// check resources
|
// check resources
|
||||||
blockingTasks := list.usedResources.UsedBy(t.resources)
|
blockingTasks := list.usedResources.UsedBy(t.resources)
|
||||||
if len(blockingTasks) == 0 {
|
if len(blockingTasks) == 0 {
|
||||||
list.usedResources.MarkInUse(t.resources, t)
|
list.usedResources.MarkInUse(t.resources, t)
|
||||||
|
// unlock list since queueing may block
|
||||||
|
list.Unlock()
|
||||||
|
unlocked = true
|
||||||
list.queue <- t
|
list.queue <- t
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if !unlocked {
|
||||||
|
list.Unlock()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
list.Unlock()
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
case <-list.queueDone:
|
case <-list.queueDone:
|
||||||
|
|||||||
Reference in New Issue
Block a user