From da0500d1f93f6da3ced8fc6793151064895dbafe Mon Sep 17 00:00:00 2001 From: Qyriad Date: Wed, 25 Mar 2026 22:08:39 +0100 Subject: [PATCH] attach pid to child stdio and pidfd types --- src/daemon.rs | 12 ++++++------ src/daemon_tokfd.rs | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/daemon.rs b/src/daemon.rs index 6ba89fb..c6c944b 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -336,8 +336,8 @@ impl Daemon { fn proxy_stdio(&mut self, fd: &BorrowedFd) -> Result<(), IoError> { let info = self.fd_info.get(&fd.as_raw_fd()).unwrap(); let label = match info.kind { - FdKind::ChildStdout => "stdout", - FdKind::ChildStderr => "stderr", + FdKind::ChildStdout(pid) => format!("stdout[{pid}]"), + FdKind::ChildStderr(pid) => format!("stderr[{pid}]"), other => unreachable!("child stdio cannot have kind {other:?}"), }; // FIXME: don't use a new allocation every time. @@ -456,8 +456,8 @@ impl Daemon { unreachable!("`child` is given `.stderr(Stdio::piped())`"); }); - let _token = self.register(stdout.into_raw_fd(), FdKind::ChildStdout); - let _token = self.register(stderr.into_raw_fd(), FdKind::ChildStderr); + let _token = self.register(stdout.into_raw_fd(), FdKind::ChildStdout(pid)); + let _token = self.register(stderr.into_raw_fd(), FdKind::ChildStderr(pid)); match rustix::process::pidfd_open(pid, PidfdFlags::NONBLOCK) { Ok(pidfd) => { @@ -668,14 +668,14 @@ impl Daemon { } } }, - FdKind::ChildStdout => { + FdKind::ChildStdout(_pid) => { warn!("got stdout"); // SAFETY: oh boy. let stdout = unsafe { BorrowedFd::borrow_raw(fd) }; self.proxy_stdio(&stdout) .unwrap_or_else(|e| error!("failed to proxy child stdout: {e}")); }, - FdKind::ChildStderr => { + FdKind::ChildStderr(_pid) => { warn!("got stderr"); // SAFETY: oh boy. let stderr = unsafe { BorrowedFd::borrow_raw(fd) }; diff --git a/src/daemon_tokfd.rs b/src/daemon_tokfd.rs index cb436c6..8342685 100644 --- a/src/daemon_tokfd.rs +++ b/src/daemon_tokfd.rs @@ -113,8 +113,8 @@ pub enum FdKind { Socket, SockStream, Poller, - ChildStdout, - ChildStderr, + ChildStdout(Pid), + ChildStderr(Pid), Pid(Pid), #[default] Unknown, @@ -128,8 +128,8 @@ impl FdKind { Socket => "socket", SockStream => "socket stream", Poller => "poller", - ChildStdout => "child stdout", - ChildStderr => "child stderr", + ChildStdout(_) => "child stdout", + ChildStderr(_) => "child stderr", Pid(_) => "pidfd", Unknown => "«unknown»", }