From bb33a59d2668aefbec58a7425ab851b4db2d982a Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 6 Nov 2021 11:51:11 +0100 Subject: driver: return output from spawn_task() for skipped tasks Preparation for pinned tasks. --- crates/driver/src/driver.rs | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/crates/driver/src/driver.rs b/crates/driver/src/driver.rs index 84262ac..ebbdb36 100644 --- a/crates/driver/src/driver.rs +++ b/crates/driver/src/driver.rs @@ -140,6 +140,11 @@ impl<'ctx> CompletionState<'ctx> { } } +enum SpawnResult { + Spawned(UnixStream), + Skipped(TaskOutput), +} + #[derive(Debug)] pub struct Driver<'ctx> { rdeps: HashMap, Vec>>, @@ -267,10 +272,11 @@ impl<'ctx> Driver<'ctx> { } } - fn spawn_task(&self, task_ref: &TaskRef<'ctx>, runner: &Runner) -> Result> { + fn spawn_task(&self, task_ref: &TaskRef<'ctx>, runner: &Runner) -> Result { let task_def = &self.state.ctx[task_ref]; if task_def.action.is_empty() { - return Ok(None); + println!("Skipping empty task {:#}", task_ref); + return Ok(SpawnResult::Skipped(TaskOutput::default())); } let task_deps = self.state.task_deps(task_ref)?; @@ -310,18 +316,20 @@ impl<'ctx> Driver<'ctx> { pins: HashMap::from([rootfs.clone()]), }; - Ok(Some(runner.spawn(&task))) + Ok(SpawnResult::Spawned(runner.spawn(&task))) } fn run_task(&mut self, task_ref: TaskRef<'ctx>, runner: &Runner) -> Result<()> { - if let Some(socket) = self.spawn_task(&task_ref, runner)? { - assert!(self - .tasks_running - .insert(socket.as_raw_fd(), (socket, task_ref)) - .is_none()); - } else { - println!("Skipping empty task {:#}", task_ref); - self.update_runnable(task_ref, TaskOutput::default()); + match self.spawn_task(&task_ref, runner)? { + SpawnResult::Spawned(socket) => { + assert!(self + .tasks_running + .insert(socket.as_raw_fd(), (socket, task_ref)) + .is_none()); + } + SpawnResult::Skipped(result) => { + self.update_runnable(task_ref, result); + } } Ok(()) } -- cgit v1.2.3