diff --git a/task/list.go b/task/list.go index 5b09d34c..d72c9fa7 100644 --- a/task/list.go +++ b/task/list.go @@ -187,7 +187,6 @@ func (list *List) GetTaskReturnValueByID(ID int) (*ProcessReturnValue, error) { // become available. func (list *List) RunTaskInBackground(name string, resources []string, process Process) (Task, *ResourceConflictError) { list.Lock() - defer list.Unlock() list.idCounter++ wgTask := &sync.WaitGroup{} @@ -204,7 +203,11 @@ func (list *List) RunTaskInBackground(name string, resources []string, process P tasks := list.usedResources.UsedBy(resources) if len(tasks) == 0 { list.usedResources.MarkInUse(task.resources, task) + // queueing task might block if channel not ready, unlock list before queueing + list.Unlock() list.queue <- task + } else { + list.Unlock() } return *task, nil