Date: Wed, 21 Feb 2018 09:55:54 +0100 From: Gary Jennejohn <gljennjohn@gmail.com> To: Julian Elischer <julian@freebsd.org> Cc: Eitan Adler <lists@eitanadler.com>, FreeBSD Hackers <freebsd-hackers@freebsd.org> Subject: Re: Marking select(2) as restrict Message-ID: <20180221095554.1dba0797@ernst.home> In-Reply-To: <83920964-9ad6-4019-14c5-3e16eff21f2e@freebsd.org> References: <CAF6rxg=h_oMiUu7P=GAOQf_OySQM2w31hg6Kas%2B3jeEM3qq_Cg@mail.gmail.com> <CAF6rxgnt9c0n8i-nHQwoKGbZKF2hM5AZqEJnz0CLo26XOO4_sg@mail.gmail.com> <CACc-My27BA-VAuNmqD1Eah%2BusUwWA8PUxyux1HxehZrqE8G%2BZA@mail.gmail.com> <83920964-9ad6-4019-14c5-3e16eff21f2e@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 21 Feb 2018 11:28:44 +0800 Julian Elischer <julian@freebsd.org> wrote: > > On 2/21/18, Eitan Adler <lists@eitanadler.com> wrote: > >> I filed a request for a slightly modified version of this patch to be > >> exp-run. I'm planning on committing unless there is significant > >> fallout or objections on this list. > >> > >> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225981 > >> > >> On 15 February 2018 at 00:10, Eitan Adler <lists@eitanadler.com> wrote: > >>> Hi all, > >>> > >>> POSIX requires that the fd_set arguments in select(2) be marked as > >>> restrict. This patch attempts to implement that. > >>> > >>> (a) Am I missing anything? > >>> (b) Anything in particular to watch out for? > >>> (c) Assuming an exp-run passes any reason not to commit? > >>> > >>> > >>> Index: lib/libc/sys/select.2 > >>> =================================================================== > >>> --- lib/libc/sys/select.2 (revision 329296) > >>> +++ lib/libc/sys/select.2 (working copy) > >>> @@ -39,7 +39,7 @@ > >>> .Sh SYNOPSIS > >>> .In sys/select.h > >>> .Ft int > >>> -.Fn select "int nfds" "fd_set *readfds" "fd_set *writefds" "fd_set > >>> *exceptfds" "struct timeval *timeout" > >>> +.Fn select "int nfds" "fd_set * restrict readfds" "fd_set * restrict > >>> writefds" "fd_set * restrict exceptfds" "struct timeval *timeout" > >>> .Fn FD_SET fd &fdset > >>> .Fn FD_CLR fd &fdset > >>> .Fn FD_ISSET fd &fdset > >>> Index: lib/libc/sys/select.c > >>> =================================================================== > >>> --- lib/libc/sys/select.c (revision 329296) > >>> +++ lib/libc/sys/select.c (working copy) > >>> @@ -41,7 +41,7 @@ __weak_reference(__sys_select, __select); > >>> > >>> #pragma weak select > >>> int > >>> -select(int n, fd_set *rs, fd_set *ws, fd_set *es, struct timeval *t) > >>> +select(int n, fd_set * restrict rs, fd_set * restrict ws, fd_set * > >>> restrict es, struct timeval *t) > >>> { > >>> > >>> return (((int (*)(int, fd_set *, fd_set *, fd_set *, struct timeval *)) > >>> Index: sys/sys/select.h > >>> =================================================================== > >>> --- sys/sys/select.h (revision 329296) > >>> +++ sys/sys/select.h (working copy) > >>> @@ -101,8 +101,7 @@ int pselect(int, fd_set *__restrict, fd_set *__res > >>> const struct timespec *__restrict, const sigset_t *__restrict); > >>> #ifndef _SELECT_DECLARED > >>> #define _SELECT_DECLARED > >>> -/* XXX missing restrict type-qualifier */ > >>> -int select(int, fd_set *, fd_set *, fd_set *, struct timeval *); > >>> +int select(int, fd_set *__restrict, fd_set *__restrict, fd_set > >>> *__restrict, struct timeval *); > >>> #endif > >>> __END_DECLS > >>> #endif /* !_KERNEL */ > >>> > >>> > >>> -- > >>> Eitan Adler > >> > >> > >> -- > >> Eitan Adler > >> _______________________________________________ > >> freebsd-hackers@freebsd.org mailing list > >> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers > >> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" > >> > So, you are saying that the bitmaps can not be shared.. > I can not think of a reason they would be shared but... > __I can also say that I can not think of a proof that there does not > exist a case where it would make sense. > > What is the potential gain?__ and is it set so in other OS or standards? > Strangely enough, the FreeBSD pselect(2) has restrict on all pointers. pselect(2) is basically a variant of select(2) with a signal mask. -- Gary Jennejohn
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20180221095554.1dba0797>