forwarded necessary fds in spawners #39
@ -199,4 +199,8 @@ impl SocketPair {
|
|||||||
// SAFETY: valid new fd as dup(2) returned successfully
|
// SAFETY: valid new fd as dup(2) returned successfully
|
||||||
Ok(unsafe { File::from_raw_fd(dup_fd) })
|
Ok(unsafe { File::from_raw_fd(dup_fd) })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn write_ref(&self) -> &File {
|
||||||
|
&self.write
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,6 +101,7 @@ impl<'a> Spawner<'a> {
|
|||||||
let mut builder = VoidBuilder::new();
|
let mut builder = VoidBuilder::new();
|
||||||
self.mount_entrypoint(&mut builder, self.binary)?;
|
self.mount_entrypoint(&mut builder, self.binary)?;
|
||||||
self.forward_mounts(&mut builder, &entrypoint.environment, &entrypoint.args);
|
self.forward_mounts(&mut builder, &entrypoint.environment, &entrypoint.args);
|
||||||
|
self.forward_files(&mut builder, &entrypoint.args);
|
||||||
|
|
||||||
let pipe = self.pipes.get_mut(s).unwrap().take_read()?;
|
let pipe = self.pipes.get_mut(s).unwrap().take_read()?;
|
||||||
builder.keep_fd(&pipe);
|
builder.keep_fd(&pipe);
|
||||||
@ -127,6 +128,7 @@ impl<'a> Spawner<'a> {
|
|||||||
let mut builder = VoidBuilder::new();
|
let mut builder = VoidBuilder::new();
|
||||||
self.mount_entrypoint(&mut builder, self.binary)?;
|
self.mount_entrypoint(&mut builder, self.binary)?;
|
||||||
self.forward_mounts(&mut builder, &entrypoint.environment, &entrypoint.args);
|
self.forward_mounts(&mut builder, &entrypoint.environment, &entrypoint.args);
|
||||||
|
self.forward_files(&mut builder, &entrypoint.args);
|
||||||
|
|
||||||
let socket = self.sockets.get_mut(s).unwrap().take_read()?;
|
let socket = self.sockets.get_mut(s).unwrap().take_read()?;
|
||||||
builder.keep_fd(&socket);
|
builder.keep_fd(&socket);
|
||||||
@ -311,6 +313,18 @@ impl<'a> Spawner<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn forward_files<'b>(
|
||||||
|
&self,
|
||||||
|
builder: &mut VoidBuilder,
|
||||||
|
arguments: impl IntoIterator<Item = &'b Arg>,
|
||||||
|
) {
|
||||||
|
for arg in arguments {
|
||||||
|
if let Arg::FileSocket(socket) = arg {
|
||||||
|
builder.keep_fd(self.sockets.get(socket.get_name()).unwrap().write_ref());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn prepare_env<'b>(
|
fn prepare_env<'b>(
|
||||||
&self,
|
&self,
|
||||||
builder: &mut VoidBuilder,
|
builder: &mut VoidBuilder,
|
||||||
|
@ -99,6 +99,15 @@ pub enum FileSocket {
|
|||||||
Tx(String),
|
Tx(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl FileSocket {
|
||||||
|
pub fn get_name(&self) -> &str {
|
||||||
|
match self {
|
||||||
|
FileSocket::Rx(n) => n,
|
||||||
|
FileSocket::Tx(n) => n,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, PartialEq, Eq, Hash, Debug)]
|
#[derive(Serialize, Deserialize, PartialEq, Eq, Hash, Debug)]
|
||||||
pub enum Environment {
|
pub enum Environment {
|
||||||
Filesystem {
|
Filesystem {
|
||||||
|
Loading…
Reference in New Issue
Block a user