summaryrefslogtreecommitdiffstats
path: root/crates/runner/src/task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/runner/src/task.rs')
-rw-r--r--crates/runner/src/task.rs5
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")?;