[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #57242] Non-recursive command passes invalid jobserver file descrip

From: Stefan Brüns
Subject: [bug #57242] Non-recursive command passes invalid jobserver file descriptors
Date: Fri, 15 Nov 2019 14:41:41 -0500 (EST)
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0


                 Summary: Non-recursive command passes invalid jobserver file
                 Project: make
            Submitted by: stefanbruens
            Submitted on: Fri 15 Nov 2019 07:41:39 PM UTC
                Severity: 3 - Normal
              Item Group: Bug
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any
       Component Version: 4.2.1
        Operating System: POSIX-Based
           Fixed Release: None
           Triage Status: None



The problem can be reproduced using the following trivial
    env | grep FLAGS

Using strace to get some diagnostics:
$> env -i strace -epipe,dup2,execve,fcntl -v -f -o nonrecursive.txt 
/usr/bin/make -j2 -f  Makefile

Obivously, the jobserver file descriptors (3,4) are closed on exec by
fcntl({3,4}, F_SETFD, FD_CLOEXEC), but are still exported via

When the "env | grep FLAGS" command is invoked via shell, the shell creates a
new pipe, reusing the no longer used file descriptors 3 and 4.

I.e. "env" (which serves as a placeholder here for some command implementing
the jobserver protocol) receives some file descriptors which are no jobserver

This does not happen when the command is marked as a recursive one (using the
'+' marker), but this is non-trivial to achieve in practice:

1. the Makefile may come from some generator
2. the command itself may be some script invoking "gmake" again.


Reply to this item at:


  Message sent via Savannah

reply via email to

[Prev in Thread] Current Thread [Next in Thread]