Marking select(2) as restrict
Gary Jennejohn
gljennjohn at gmail.com
Wed Feb 21 08:55:58 UTC 2018
On Wed, 21 Feb 2018 11:28:44 +0800
Julian Elischer <julian at freebsd.org> wrote:
> > On 2/21/18, Eitan Adler <lists at 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 at 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 at freebsd.org mailing list
> >> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> >> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at 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
More information about the freebsd-hackers
mailing list