On Sun, Sep 11, 2016 at 20:01:51 -0700, Jeremy Huddleston Sequoia wrote:
> O_CLOEXEC is not a file bit. It is not setable with F_SETFL. One must use it
> when calling open(2). To set it cloexec on an existing fd, F_SETFD and
> FD_CLOEXEC must be used.
>
> This also fixes a build failure regression on configurations that don't have
> O_CLOEXEC defined.
>
> cf: http://pubs.opengroup.org/onlinepubs/9699919799/functions/fcntl.html
> Regressed-in: 30ac7567980a1eb79d084a63e0e74e1d9a3af673
> Signed-off-by: Jeremy Huddleston Sequoia
> ---
> os/inputthread.c | 15 +--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>
A possible further improvement would be to use pipe2(2) where available
to set O_CLOEXEC immediately, rather than as a separate step.
Anyway, this gets my
Reviewed-by: Julien Cristau
Cheers,
Julien
> diff --git a/os/inputthread.c b/os/inputthread.c
> index 2ea39e7..6aa0a9c 100644
> --- a/os/inputthread.c
> +++ b/os/inputthread.c
> @@ -385,6 +385,7 @@ void
> InputThreadPreInit(void)
> {
> int fds[2], hotplugPipe[2];
> +int flags;
>
> if (!InputThreadEnable)
> return;
> @@ -408,13 +409,23 @@ InputThreadPreInit(void)
> * in parallel.
> */
> inputThreadInfo->readPipe = fds[0];
> -fcntl(inputThreadInfo->readPipe, F_SETFL, O_NONBLOCK | O_CLOEXEC);
> +fcntl(inputThreadInfo->readPipe, F_SETFL, O_NONBLOCK);
> +flags = fcntl(inputThreadInfo->readPipe, F_GETFD);
> +if (flags != -1) {
> +flags |= FD_CLOEXEC;
> +(void)fcntl(inputThreadInfo->readPipe, F_SETFD, &flags);
> +}
> SetNotifyFd(inputThreadInfo->readPipe, InputThreadNotifyPipe,
> X_NOTIFY_READ, NULL);
>
> inputThreadInfo->writePipe = fds[1];
>
> hotplugPipeRead = hotplugPipe[0];
> -fcntl(hotplugPipeRead, F_SETFL, O_NONBLOCK | O_CLOEXEC);
> +fcntl(hotplugPipeRead, F_SETFL, O_NONBLOCK);
> +flags = fcntl(hotplugPipeRead, F_GETFD);
> +if (flags != -1) {
> +flags |= FD_CLOEXEC;
> +(void)fcntl(hotplugPipeRead, F_SETFD, &flags);
> +}
> hotplugPipeWrite = hotplugPipe[1];
>
> #if defined(HAVE_PTHREAD_SETNAME_NP_WITH_TID)
> --
> 2.10.0 (Apple Git-99)
>
> ___
> xorg-devel@lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel