added missing cmsg space
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing

This commit is contained in:
Jake Hillion 2022-05-10 23:10:32 +01:00
parent 8f2e9b9add
commit 7da0e02235

View File

@ -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(),
msg: "recvmsg", &[],
src: e, Some(&mut cmsg_buf),
} MsgFlags::empty(),
)
.map_err(|e| Error::Nix {
msg: "recvmsg",
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!(),
} }