diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-21 20:52:09 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-10-21 20:52:09 +0200 |
commit | 94e299928560b58791e02d5143530e7f534e843c (patch) | |
tree | e4f252510c3c312df09bf266b2756e62f2e38f7b | |
parent | 43f146848fd5a57cb3d40cbc513e87d9431fb1e9 (diff) | |
download | rebel-94e299928560b58791e02d5143530e7f534e843c.tar rebel-94e299928560b58791e02d5143530e7f534e843c.zip |
runner: expose reply channel
-rw-r--r-- | src/executor.rs | 2 | ||||
-rw-r--r-- | src/runner/container/mod.rs | 4 | ||||
-rw-r--r-- | src/runner/mod.rs | 3 |
3 files changed, 5 insertions, 4 deletions
diff --git a/src/executor.rs b/src/executor.rs index 5dec81d..853d2be 100644 --- a/src/executor.rs +++ b/src/executor.rs @@ -244,7 +244,7 @@ impl<'ctx> Executor<'ctx> { input, }; - runner.run(&task) + runner.spawn(&task).recv().expect("IPC recv() error") } fn update_runnable(&mut self, task_ref: &TaskRef) { diff --git a/src/runner/container/mod.rs b/src/runner/container/mod.rs index c9032e4..99bbb62 100644 --- a/src/runner/container/mod.rs +++ b/src/runner/container/mod.rs @@ -79,13 +79,13 @@ impl ContainerRunner { } impl super::Runner for ContainerRunner { - fn run(&self, task: &runner::Task) -> Result<runner::TaskOutput> { + fn spawn(&self, task: &runner::Task) -> ipc::IpcReceiver<Result<runner::TaskOutput>> { let (reply_tx, reply_rx) = ipc::channel().expect("IPC channel creation failed"); self.channel .send(Request(task.clone(), reply_tx)) .expect("ContainerRunner task submission failed"); - reply_rx.recv().expect("IPC recv() error") + reply_rx } } diff --git a/src/runner/mod.rs b/src/runner/mod.rs index a0b88ef..02e7884 100644 --- a/src/runner/mod.rs +++ b/src/runner/mod.rs @@ -1,5 +1,6 @@ pub mod container; +use ipc_channel::ipc; use serde::{Deserialize, Serialize}; use std::collections::HashMap; @@ -27,5 +28,5 @@ pub struct Task { } pub trait Runner { - fn run(&self, task: &Task) -> Result<TaskOutput>; + fn spawn(&self, task: &Task) -> ipc::IpcReceiver<Result<TaskOutput>>; } |