From 7da0e02235644004c402f29faa5520c963e5f1cc Mon Sep 17 00:00:00 2001 From: Jake Hillion Date: Tue, 10 May 2022 23:10:32 +0100 Subject: [PATCH] added missing cmsg space --- src/spawner/mod.rs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/spawner/mod.rs b/src/spawner/mod.rs index c49eee3..76b5c4a 100644 --- a/src/spawner/mod.rs +++ b/src/spawner/mod.rs @@ -13,7 +13,7 @@ use std::collections::HashMap; use std::ffi::CString; use std::fs::File; 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 nix::sys::signal::{kill, Signal}; @@ -21,6 +21,7 @@ use nix::sys::socket::{recvmsg, ControlMessageOwned, MsgFlags}; use nix::unistd::{self, Pid}; const BUFFER_SIZE: usize = 1024; +const MAX_FILE_DESCRIPTORS: usize = 16; pub struct Spawner<'a> { pub spec: &'a Specification, @@ -129,7 +130,7 @@ impl<'a> Spawner<'a> { let void = builder.spawn(closure)?; info!( - "prepared pipe trigger for entrypoint `{}` as {}", + "spawned pipe trigger for entrypoint `{}` as {}", name.as_str(), void ); @@ -163,7 +164,7 @@ impl<'a> Spawner<'a> { let void = builder.spawn(closure)?; info!( - "prepared socket trigger for entrypoint `{}` as {}", + "spawned socket trigger for entrypoint `{}` as {}", name.as_str(), 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<()> { + let mut cmsg_buf = nix::cmsg_space!([RawFd; MAX_FILE_DESCRIPTORS]); + loop { - let msg = recvmsg(socket.as_raw_fd(), &[], None, MsgFlags::empty()).map_err(|e| { - Error::Nix { - msg: "recvmsg", - src: e, - } + let msg = recvmsg( + socket.as_raw_fd(), + &[], + Some(&mut cmsg_buf), + MsgFlags::empty(), + ) + .map_err(|e| Error::Nix { + msg: "recvmsg", + src: e, })?; 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!(), }