added missing cmsg space
This commit is contained in:
parent
8f2e9b9add
commit
7da0e02235
@ -13,7 +13,7 @@ use std::collections::HashMap;
|
|||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd};
|
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
use nix::sys::signal::{kill, Signal};
|
use nix::sys::signal::{kill, Signal};
|
||||||
@ -21,6 +21,7 @@ use nix::sys::socket::{recvmsg, ControlMessageOwned, MsgFlags};
|
|||||||
use nix::unistd::{self, Pid};
|
use nix::unistd::{self, Pid};
|
||||||
|
|
||||||
const BUFFER_SIZE: usize = 1024;
|
const BUFFER_SIZE: usize = 1024;
|
||||||
|
const MAX_FILE_DESCRIPTORS: usize = 16;
|
||||||
|
|
||||||
pub struct Spawner<'a> {
|
pub struct Spawner<'a> {
|
||||||
pub spec: &'a Specification,
|
pub spec: &'a Specification,
|
||||||
@ -129,7 +130,7 @@ impl<'a> Spawner<'a> {
|
|||||||
|
|
||||||
let void = builder.spawn(closure)?;
|
let void = builder.spawn(closure)?;
|
||||||
info!(
|
info!(
|
||||||
"prepared pipe trigger for entrypoint `{}` as {}",
|
"spawned pipe trigger for entrypoint `{}` as {}",
|
||||||
name.as_str(),
|
name.as_str(),
|
||||||
void
|
void
|
||||||
);
|
);
|
||||||
@ -163,7 +164,7 @@ impl<'a> Spawner<'a> {
|
|||||||
|
|
||||||
let void = builder.spawn(closure)?;
|
let void = builder.spawn(closure)?;
|
||||||
info!(
|
info!(
|
||||||
"prepared socket trigger for entrypoint `{}` as {}",
|
"spawned socket trigger for entrypoint `{}` as {}",
|
||||||
name.as_str(),
|
name.as_str(),
|
||||||
void
|
void
|
||||||
);
|
);
|
||||||
@ -216,17 +217,24 @@ impl<'a> Spawner<'a> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
builder.spawn(closure)?;
|
let void = builder.spawn(closure)?;
|
||||||
|
info!("spawned entrypoint `{}` as {}", name, void);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn file_socket_trigger(&self, socket: File, spec: &Entrypoint, name: &str) -> Result<()> {
|
fn file_socket_trigger(&self, socket: File, spec: &Entrypoint, name: &str) -> Result<()> {
|
||||||
|
let mut cmsg_buf = nix::cmsg_space!([RawFd; MAX_FILE_DESCRIPTORS]);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let msg = recvmsg(socket.as_raw_fd(), &[], None, MsgFlags::empty()).map_err(|e| {
|
let msg = recvmsg(
|
||||||
Error::Nix {
|
socket.as_raw_fd(),
|
||||||
|
&[],
|
||||||
|
Some(&mut cmsg_buf),
|
||||||
|
MsgFlags::empty(),
|
||||||
|
)
|
||||||
|
.map_err(|e| Error::Nix {
|
||||||
msg: "recvmsg",
|
msg: "recvmsg",
|
||||||
src: e,
|
src: e,
|
||||||
}
|
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
debug!("triggering from socket recvmsg");
|
debug!("triggering from socket recvmsg");
|
||||||
@ -273,7 +281,8 @@ impl<'a> Spawner<'a> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
builder.spawn(closure)?;
|
let void = builder.spawn(closure)?;
|
||||||
|
info!("spawned entrypoint `{}` as {}", name, void);
|
||||||
}
|
}
|
||||||
_ => unimplemented!(),
|
_ => unimplemented!(),
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user