fix regression in select with no timeout
authorRich Felker <dalias@aerifal.cx>
Wed, 7 Aug 2019 06:57:53 +0000 (02:57 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 7 Aug 2019 06:57:53 +0000 (02:57 -0400)
commit 722a1ae3351a03ab25010dbebd492eced664853b inadvertently passed a
copy of {s,us} to the syscall even if the timeout argument tv was
null, thereby causing immediate timeout (polling) in place of
unlimited timeout. only archs using SYS_select were affected.

src/select/select.c

index e84c887f668bbc4e6082a417e01d3e45811699b5..8a78688403047d0a1ce8ff3566530ea3722615f9 100644 (file)
@@ -35,7 +35,8 @@ int select(int n, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict
                return __syscall_ret(r);
 #endif
 #ifdef SYS_select
-       return syscall_cp(SYS_select, n, rfds, wfds, efds, ((long[]){s, us}));
+       return syscall_cp(SYS_select, n, rfds, wfds, efds,
+               tv ? ((long[]){s, us}) : 0);
 #else
        return syscall_cp(SYS_pselect6, n, rfds, wfds, efds,
                tv ? ((long[]){s, ns}) : 0, ((syscall_arg_t[]){ 0, _NSIG/8 }));