![]() |
|
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.