Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Feb 2018 11:29:24 +0800
From:      Julian Elischer <julian@freebsd.org>
To:        Stefan Blachmann <sblachmann@gmail.com>, Eitan Adler <lists@eitanadler.com>
Cc:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Re: Marking select(2) as restrict
Message-ID:  <01800d65-ec8d-2337-5459-803b5e2fbe0e@freebsd.org>
In-Reply-To: <CACc-My27BA-VAuNmqD1Eah%2BusUwWA8PUxyux1HxehZrqE8G%2BZA@mail.gmail.com>
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>

next in thread | previous in thread | raw e-mail | index | archive | help
On 21/2/18 9:52 am, Stefan Blachmann wrote:
> 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"
>>
> _______________________________________________
> 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?01800d65-ec8d-2337-5459-803b5e2fbe0e>