|
|
Message-ID: <20201227184032.22413-11-alobakin@pm.me>
Date: Sun, 27 Dec 2020 18:42:01 +0000
From: Alexander Lobakin <alobakin@...me>
To: Rich Felker <dalias@...ifal.cx>, musl@...ts.openwall.com
Cc: Alexander Lobakin <alobakin@...me>
Subject: [PATCH 11/18] pselect, select: prefer time64 variant of pselect6 if available
Instead of using time64 variant "only when needed", use it as
a default and fallback to time32 only on -ENOSYS.
Also use deprecated select only as a last chance.
Signed-off-by: Alexander Lobakin <alobakin@...me>
---
src/select/pselect.c | 6 ++----
src/select/select.c | 22 ++++++++++++----------
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/src/select/pselect.c b/src/select/pselect.c
index 54cfb291bba2..f68616a247de 100644
--- a/src/select/pselect.c
+++ b/src/select/pselect.c
@@ -13,10 +13,8 @@ int pselect(int n, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restric
time_t s = ts ? ts->tv_sec : 0;
long ns = ts ? ts->tv_nsec : 0;
#ifdef SYS_pselect6_time64
- int r = -ENOSYS;
- if (SYS_pselect6 == SYS_pselect6_time64 || !IS32BIT(s))
- r = __syscall_cp(SYS_pselect6_time64, n, rfds, wfds, efds,
- ts ? ((long long[]){s, ns}) : 0, data);
+ int r = __syscall_cp(SYS_pselect6_time64, n, rfds, wfds, efds,
+ ts ? ((long long[]){s, ns}) : 0, data);
if (SYS_pselect6 == SYS_pselect6_time64 || r!=-ENOSYS)
return __syscall_ret(r);
s = CLAMP(s);
diff --git a/src/select/select.c b/src/select/select.c
index 8a7868840304..d2dbb7b08362 100644
--- a/src/select/select.c
+++ b/src/select/select.c
@@ -13,6 +13,7 @@ int select(int n, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict
suseconds_t us = tv ? tv->tv_usec : 0;
long ns;
const time_t max_time = (1ULL<<8*sizeof(time_t)-1)-1;
+ int r = -ENOSYS;
if (s<0 || us<0) return __syscall_ret(-EINVAL);
if (us/1000000 > max_time - s) {
@@ -26,19 +27,20 @@ int select(int n, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict
}
#ifdef SYS_pselect6_time64
- int r = -ENOSYS;
- if (SYS_pselect6 == SYS_pselect6_time64 || !IS32BIT(s))
- r = __syscall_cp(SYS_pselect6_time64, n, rfds, wfds, efds,
- tv ? ((long long[]){s, ns}) : 0,
- ((syscall_arg_t[]){ 0, _NSIG/8 }));
+ r = __syscall_cp(SYS_pselect6_time64, n, rfds, wfds, efds,
+ tv ? ((long long[]){s, ns}) : 0,
+ ((syscall_arg_t[]){ 0, _NSIG/8 }));
if (SYS_pselect6 == SYS_pselect6_time64 || r!=-ENOSYS)
return __syscall_ret(r);
#endif
-#ifdef SYS_select
- return syscall_cp(SYS_select, n, rfds, wfds, efds,
- tv ? ((long[]){s, us}) : 0);
-#else
- return syscall_cp(SYS_pselect6, n, rfds, wfds, efds,
+#ifdef SYS_pselect6
+ r = __syscall_cp(SYS_pselect6, n, rfds, wfds, efds,
tv ? ((long[]){s, ns}) : 0, ((syscall_arg_t[]){ 0, _NSIG/8 }));
#endif
+#ifdef SYS_select
+ if (r == -ENOSYS)
+ r = __syscall_cp(SYS_select, n, rfds, wfds, efds,
+ tv ? ((long[]){s, us}) : 0);
+#endif
+ return __syscall_ret(r);
}
--
2.29.2
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.