Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Nov 2014 13:18:08 -0700
From:      Ian Lepore <ian@FreeBSD.org>
To:        Dieter BSD <dieterbsd@gmail.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Running 8 building 10 gives "Out of file descriptors" ?
Message-ID:  <1416428288.1147.140.camel@revolution.hippie.lan>
In-Reply-To: <CAA3ZYrAcCRwb%2B8pWjmeGS9gaE7MS43Jjx17oFkLF8oGJYgCOnw@mail.gmail.com>
References:  <CAA3ZYrAcCRwb%2B8pWjmeGS9gaE7MS43Jjx17oFkLF8oGJYgCOnw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 2014-11-19 at 11:07 -0800, Dieter BSD wrote:
> if (fd < 10) {
>                 fd2 = fcntl(fd, F_DUPFD_CLOEXEC, 10);
>                 close(fd);
>                 if (fd2 < 0)
>                   {
>                     int limit;
>                     limit = getdtablesize();
>                     fprintf(stderr, "sh: setinputfile(): fcntl() returned %d ge\
> tdtablesize() returned %d\n", fd2, limit);
>                     perror("sh: fcntl(F_DUPFD_CLOEXEC) failed:");
>                         error("sh: Out of file descriptors?");
>                   }
>                 fd = fd2;
>         }
> 
> Result:
> sh: setinputfile(): fcntl() returned -1 getdtablesize() returned 11095
> sh: fcntl(F_DUPFD_CLOEXEC) failed:: Invalid argument
> sh: Out of file descriptors?
> 
> find /usr/include/ | xargs grep F_DUPFD_CLOEXEC
> gives no hits in 8.2, but
> /usr/include/sys/fcntl.h:
> /new/freebsd/usr/include/fcntl.h:
> #define    F_DUPFD_CLOEXEC 17         /* Like F_DUPFD, but FD_CLOEXEC is set */
> in 10.1
> 
> So, F_DUPFD_CLOEXEC was added after 8.2, and someone changed sh to
> use it, but couldn't be bothered to fix the error message.
> 
> If someone would like to fix this, they don't need to build a toolchain,
> they can use a 2 line script:
> 
> #!/bin/sh
> echo Hello, World!
> 
> So Ian, how did you avoid running into this problem?

Ohhhh... hmm.  That must have been MFC'd to 8-stable after I had updated
my 8.2 to 8.4 (which was quite a while ago, more than a year now I
guess).

I think this means it's no longer possible to bootstrap a system older
than 8.4 in a single step.  You'd need to go 8.2 -> 8.4 then install
that and reboot to go forward from there.  I'm not sure there's an easy
fix for that, but we could at least update the check in Makefile.inc1 to
stop the build and tell you that you can't bootstrap a system older than
8.4 (right now the cutoff check is 8.0).

I'm not sure what the project policy is in terms of fixing this (no
matter how hard it may be) versus changing the cutoff warning.  I'll
look into it.

-- Ian





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1416428288.1147.140.camel>