attach pid to child stdio and pidfd types
This commit is contained in:
parent
c60a145587
commit
da0500d1f9
2 changed files with 10 additions and 10 deletions
|
|
@ -336,8 +336,8 @@ impl Daemon {
|
||||||
fn proxy_stdio(&mut self, fd: &BorrowedFd) -> Result<(), IoError> {
|
fn proxy_stdio(&mut self, fd: &BorrowedFd) -> Result<(), IoError> {
|
||||||
let info = self.fd_info.get(&fd.as_raw_fd()).unwrap();
|
let info = self.fd_info.get(&fd.as_raw_fd()).unwrap();
|
||||||
let label = match info.kind {
|
let label = match info.kind {
|
||||||
FdKind::ChildStdout => "stdout",
|
FdKind::ChildStdout(pid) => format!("stdout[{pid}]"),
|
||||||
FdKind::ChildStderr => "stderr",
|
FdKind::ChildStderr(pid) => format!("stderr[{pid}]"),
|
||||||
other => unreachable!("child stdio cannot have kind {other:?}"),
|
other => unreachable!("child stdio cannot have kind {other:?}"),
|
||||||
};
|
};
|
||||||
// FIXME: don't use a new allocation every time.
|
// FIXME: don't use a new allocation every time.
|
||||||
|
|
@ -456,8 +456,8 @@ impl Daemon {
|
||||||
unreachable!("`child` is given `.stderr(Stdio::piped())`");
|
unreachable!("`child` is given `.stderr(Stdio::piped())`");
|
||||||
});
|
});
|
||||||
|
|
||||||
let _token = self.register(stdout.into_raw_fd(), FdKind::ChildStdout);
|
let _token = self.register(stdout.into_raw_fd(), FdKind::ChildStdout(pid));
|
||||||
let _token = self.register(stderr.into_raw_fd(), FdKind::ChildStderr);
|
let _token = self.register(stderr.into_raw_fd(), FdKind::ChildStderr(pid));
|
||||||
|
|
||||||
match rustix::process::pidfd_open(pid, PidfdFlags::NONBLOCK) {
|
match rustix::process::pidfd_open(pid, PidfdFlags::NONBLOCK) {
|
||||||
Ok(pidfd) => {
|
Ok(pidfd) => {
|
||||||
|
|
@ -668,14 +668,14 @@ impl Daemon {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
FdKind::ChildStdout => {
|
FdKind::ChildStdout(_pid) => {
|
||||||
warn!("got stdout");
|
warn!("got stdout");
|
||||||
// SAFETY: oh boy.
|
// SAFETY: oh boy.
|
||||||
let stdout = unsafe { BorrowedFd::borrow_raw(fd) };
|
let stdout = unsafe { BorrowedFd::borrow_raw(fd) };
|
||||||
self.proxy_stdio(&stdout)
|
self.proxy_stdio(&stdout)
|
||||||
.unwrap_or_else(|e| error!("failed to proxy child stdout: {e}"));
|
.unwrap_or_else(|e| error!("failed to proxy child stdout: {e}"));
|
||||||
},
|
},
|
||||||
FdKind::ChildStderr => {
|
FdKind::ChildStderr(_pid) => {
|
||||||
warn!("got stderr");
|
warn!("got stderr");
|
||||||
// SAFETY: oh boy.
|
// SAFETY: oh boy.
|
||||||
let stderr = unsafe { BorrowedFd::borrow_raw(fd) };
|
let stderr = unsafe { BorrowedFd::borrow_raw(fd) };
|
||||||
|
|
|
||||||
|
|
@ -113,8 +113,8 @@ pub enum FdKind {
|
||||||
Socket,
|
Socket,
|
||||||
SockStream,
|
SockStream,
|
||||||
Poller,
|
Poller,
|
||||||
ChildStdout,
|
ChildStdout(Pid),
|
||||||
ChildStderr,
|
ChildStderr(Pid),
|
||||||
Pid(Pid),
|
Pid(Pid),
|
||||||
#[default]
|
#[default]
|
||||||
Unknown,
|
Unknown,
|
||||||
|
|
@ -128,8 +128,8 @@ impl FdKind {
|
||||||
Socket => "socket",
|
Socket => "socket",
|
||||||
SockStream => "socket stream",
|
SockStream => "socket stream",
|
||||||
Poller => "poller",
|
Poller => "poller",
|
||||||
ChildStdout => "child stdout",
|
ChildStdout(_) => "child stdout",
|
||||||
ChildStderr => "child stderr",
|
ChildStderr(_) => "child stderr",
|
||||||
Pid(_) => "pidfd",
|
Pid(_) => "pidfd",
|
||||||
Unknown => "«unknown»",
|
Unknown => "«unknown»",
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue