From 0a254c352b00fce664655450fb52184b314ea6fd Mon Sep 17 00:00:00 2001 From: Joel Galenson Date: Mon, 21 Jun 2021 13:30:46 -0700 Subject: Upgrade rust/crates/mio to 0.7.13 Test: make Change-Id: Idd45070bd86fe18e99bcd9e18f93920923cdf70a --- src/lib.rs | 2 +- src/sys/unix/selector/epoll.rs | 2 +- src/sys/unix/selector/kqueue.rs | 2 +- src/sys/unix/selector/mod.rs | 10 ++++++++++ 4 files changed, 13 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index ad417c2..165a340 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,4 @@ -#![doc(html_root_url = "https://docs.rs/mio/0.7.11")] +#![doc(html_root_url = "https://docs.rs/mio/0.7.13")] #![deny( missing_docs, missing_debug_implementations, diff --git a/src/sys/unix/selector/epoll.rs b/src/sys/unix/selector/epoll.rs index 76ee7f9..38667d6 100644 --- a/src/sys/unix/selector/epoll.rs +++ b/src/sys/unix/selector/epoll.rs @@ -41,7 +41,7 @@ impl Selector { } pub fn try_clone(&self) -> io::Result { - syscall!(dup(self.ep)).map(|ep| Selector { + syscall!(fcntl(self.ep, libc::F_DUPFD_CLOEXEC, super::LOWEST_FD)).map(|ep| Selector { // It's the same selector, so we use the same id. #[cfg(debug_assertions)] id: self.id, diff --git a/src/sys/unix/selector/kqueue.rs b/src/sys/unix/selector/kqueue.rs index 34f5340..b36a537 100644 --- a/src/sys/unix/selector/kqueue.rs +++ b/src/sys/unix/selector/kqueue.rs @@ -87,7 +87,7 @@ impl Selector { } pub fn try_clone(&self) -> io::Result { - syscall!(dup(self.kq)).map(|kq| Selector { + syscall!(fcntl(self.kq, libc::F_DUPFD_CLOEXEC, super::LOWEST_FD)).map(|kq| Selector { // It's the same selector, so we use the same id. #[cfg(debug_assertions)] id: self.id, diff --git a/src/sys/unix/selector/mod.rs b/src/sys/unix/selector/mod.rs index 7525898..b73d645 100644 --- a/src/sys/unix/selector/mod.rs +++ b/src/sys/unix/selector/mod.rs @@ -33,3 +33,13 @@ mod kqueue; target_os = "openbsd" ))] pub(crate) use self::kqueue::{event, Event, Events, Selector}; + +/// Lowest file descriptor used in `Selector::try_clone`. +/// +/// # Notes +/// +/// Usually fds 0, 1 and 2 are standard in, out and error. Some application +/// blindly assume this to be true, which means using any one of those a select +/// could result in some interesting and unexpected errors. Avoid that by using +/// an fd that doesn't have a pre-determined usage. +const LOWEST_FD: libc::c_int = 3; -- cgit v1.2.3