Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Feb 2018 02:52:35 +0100
From:      Stefan Blachmann <sblachmann@gmail.com>
To:        Eitan Adler <lists@eitanadler.com>
Cc:        FreeBSD Hackers <freebsd-hackers@freebsd.org>, Warner Losh <imp@bsdimp.com>
Subject:   Re: Marking select(2) as restrict
Message-ID:  <CACc-My27BA-VAuNmqD1Eah%2BusUwWA8PUxyux1HxehZrqE8G%2BZA@mail.gmail.com>
In-Reply-To: <CAF6rxgnt9c0n8i-nHQwoKGbZKF2hM5AZqEJnz0CLo26XOO4_sg@mail.gmail.com>
References:  <CAF6rxg=h_oMiUu7P=GAOQf_OySQM2w31hg6Kas%2B3jeEM3qq_Cg@mail.gmail.com> <CAF6rxgnt9c0n8i-nHQwoKGbZKF2hM5AZqEJnz0CLo26XOO4_sg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
As the last C standard I know is ANSI, I was curious and read what
restrict does (https://en.wikipedia.org/wiki/Restrict).

To understand more about select() I read in the Linux tutorial
(http://man7.org/linux/man-pages/man2/select_tut.2.html) .
The section "Select Law" looks like that things could break easy.

Personally (in particular because I don't know the matter) I would be
afraid that making select pointers restrict could cause hard-to debug
misbehavior of a few programs that are already working borderline
(linux ports etc).

But as said, this is my unqualified guess.
And, few, almost no documents on select show it as restrict.

Always following Posix isn't necessarily good, as many don't care about it.
For example, with 11.0 the default Posix conform SHM setting was
changed to non-Posix-compliant, because posix conformity caused just
too many people troubles.
And, maybe the gain would be little anyway?

Just my worthless 2 cents.
Have a good day @hackers :)
Stefan


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"
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CACc-My27BA-VAuNmqD1Eah%2BusUwWA8PUxyux1HxehZrqE8G%2BZA>