diff options
Diffstat (limited to 'crates/runner/src/task.rs')
-rw-r--r-- | crates/runner/src/task.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/crates/runner/src/task.rs b/crates/runner/src/task.rs index 6c52be2..e27fd49 100644 --- a/crates/runner/src/task.rs +++ b/crates/runner/src/task.rs @@ -433,7 +433,6 @@ fn save_cached(input_hash: &InputHash, output: &TaskOutput) -> Result<()> { pub fn handle(task: Task, jobserver: &mut Jobserver) -> Result<TaskOutput> { let input_hash = input_hash(&task); - // TODO: We should not hold a job token while waiting on the lock let _lock = unix::lock(paths::task_lock_filename(&input_hash), true, true) .context("Failed to get task lock")?; @@ -441,12 +440,16 @@ pub fn handle(task: Task, jobserver: &mut Jobserver) -> Result<TaskOutput> { return Ok(task_output); } + let token = jobserver.wait(); + let start_time = Instant::now(); println!("Starting task {} ({})", task.label, input_hash); let task_ret = run_and_hash_task(&input_hash, &task, jobserver); let cleanup_ret = cleanup_task(&input_hash); + jobserver.post(token); + let task_output = task_ret?; cleanup_ret.context("Failed to clean up after task")?; |