Currently, POSIX defines exactly one flag accessed via F_GETFD/F_SETFD and
that is FD_CLOEXEC.
However, it does not prohibit a conforming implementation from defining
additional bits.

So, a portable program should assume other bits may be set and try to
preserve them.

Quoting from section 3.14 of Steven's Advanced Programming in the UNIX
Environment:

When we modify either the file descriptor flags or the file status flags,
we must be
careful to fetch the existing value, modify it as desired, and then set the
new flag
value.  We can't simply issue an F_SETFD or F_SETFL command, as this could
turn
off flag bits that were previously set.

See also the example in
http://www.gnu.org/software/libc/manual/html_node/Descriptor-Flags.html

-Paul [Who always does what the late W. Richard Stevens says to.]


On Wed, Apr 23, 2014 at 3:11 PM, Jeff Squyres (jsquyres) <jsquy...@cisco.com
> wrote:

> We opened the fd a few lines above with default flags -- is the addition
> GETFD necessary?
>
>
> https://github.com/open-mpi/hwloc/blob/master/src/topology-linux.c#L4595
>
>
> On Apr 23, 2014, at 6:04 PM, Paul Hargrove <phhargr...@lbl.gov> wrote:
>
> > In order to preserve any existing flags, shouldn't this be more like:
> >   int prev;
> >   if ((-1 == (prev =  fcntl(root, F_GETFD, 0)) ||
> >       (-1 == fcntl(root, F_SETFD, FD_CLOEXEC | prev)))
> >
> >
> >
> >
> > On Wed, Apr 23, 2014 at 2:55 PM, Jeff Squyres (jsquyres) <
> jsquy...@cisco.com> wrote:
> > Will do.
> >
> > On Apr 23, 2014, at 5:52 PM, Samuel Thibault <samuel.thiba...@inria.fr>
> wrote:
> >
> > > Jeff Squyres (jsquyres), le Wed 23 Apr 2014 21:05:55 +0000, a écrit :
> > >> Any objections to this patch?  In OMPI, we're seeing this fd leak
> into child processes.
> > >>
> > >> diff --git a/src/topology-linux.c b/src/topology-linux.c
> > >> index e934d4c..8c5fba1 100644
> > >> --- a/src/topology-linux.c
> > >> +++ b/src/topology-linux.c
> > >> @@ -4601,6 +4601,13 @@ hwloc_linux_component_instantiate(struct
> hwloc_disc_compo
> > >>     data->is_real_fsroot = 0;
> > >>   }
> > >>
> > >
> > > We probably want an #ifdef FD_CLOEXEC here, not all systems have it.
> > >
> > >> +  /* Since this fd stays open after hwloc returns, mark it as
> > >> +     close-on-exec so that children don't inherit it */
> > >> +  if (fcntl(root, F_SETFD, FD_CLOEXEC) == -1) {
> > >> +      close(root);
> > >> +      root = -1;
> > >> +      goto out_with_data;
> > >> +  }
> > >> #else
> > >>   if (strcmp(fsroot_path, "/")) {
> > >>     errno = ENOSYS;
> > >>
> > >> --
> > >> Jeff Squyres
> > >> jsquy...@cisco.com
> > >> For corporate legal information go to:
> http://www.cisco.com/web/about/doing_business/legal/cri/
> > >>
> > >> _______________________________________________
> > >> hwloc-devel mailing list
> > >> hwloc-de...@open-mpi.org
> > >> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-devel
> > >>
> > >
> > > --
> > > Samuel
> > > Je suis maintenant possesseur d'un ordinateur portable Compaq Armada
> > > 1592DT avec port infra-rouge. Auriez-vous connaissance de programmes
> > > suceptibles d'utiliser ce port afin de servir de télécommande ?
> > > -+- JN in NPC : ben quoi, c'est pas à ça que ça sert ?
> > > _______________________________________________
> > > hwloc-devel mailing list
> > > hwloc-de...@open-mpi.org
> > > http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-devel
> >
> >
> > --
> > Jeff Squyres
> > jsquy...@cisco.com
> > For corporate legal information go to:
> http://www.cisco.com/web/about/doing_business/legal/cri/
> >
> > _______________________________________________
> > hwloc-devel mailing list
> > hwloc-de...@open-mpi.org
> > http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-devel
> >
> >
> >
> > --
> > Paul H. Hargrove                          phhargr...@lbl.gov
> > Future Technologies Group
> > Computer and Data Sciences Department     Tel: +1-510-495-2352
> > Lawrence Berkeley National Laboratory     Fax: +1-510-486-6900
> > _______________________________________________
> > hwloc-devel mailing list
> > hwloc-de...@open-mpi.org
> > http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-devel
>
>
> --
> Jeff Squyres
> jsquy...@cisco.com
> For corporate legal information go to:
> http://www.cisco.com/web/about/doing_business/legal/cri/
>
> _______________________________________________
> hwloc-devel mailing list
> hwloc-de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-devel
>



-- 
Paul H. Hargrove                          phhargr...@lbl.gov
Future Technologies Group
Computer and Data Sciences Department     Tel: +1-510-495-2352
Lawrence Berkeley National Laboratory     Fax: +1-510-486-6900

Reply via email to