From 2e62fdab76bd92d0d381589fc85602efad93c846 Mon Sep 17 00:00:00 2001 From: The 8472 Date: Tue, 7 Jun 2022 21:30:07 +0200 Subject: [PATCH] use fcntl fallback for additional poll-specific errors --- library/std/src/sys/unix/mod.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/library/std/src/sys/unix/mod.rs b/library/std/src/sys/unix/mod.rs index 0f06811a1d6..852f5dec31a 100644 --- a/library/std/src/sys/unix/mod.rs +++ b/library/std/src/sys/unix/mod.rs @@ -88,14 +88,15 @@ pub unsafe fn init(argc: isize, argv: *const *const u8) { ]; while libc::poll(pfds.as_mut_ptr(), 3, 0) == -1 { - if errno() == libc::EINTR { - continue; + match errno() { + libc::EINTR => continue, + libc::EINVAL | libc::EAGAIN | libc::ENOMEM => { + // RLIMIT_NOFILE or temporary allocation failures + // may be preventing use of poll(), fall back to fcntl + break 'poll; + } + _ => libc::abort(), } - if errno() == libc::EINVAL { - // RLIMIT_NOFILE may be preventing use of poll() - break 'poll; - } - libc::abort(); } for pfd in pfds { if pfd.revents & libc::POLLNVAL == 0 {