[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug #58232] FD_CLOEXEC not initialized on jobserver pipe for recursive
From: |
Kevin Buettner |
Subject: |
[bug #58232] FD_CLOEXEC not initialized on jobserver pipe for recursive make invocations |
Date: |
Thu, 23 Apr 2020 17:58:59 -0400 (EDT) |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36 |
URL:
<https://savannah.gnu.org/bugs/?58232>
Summary: FD_CLOEXEC not initialized on jobserver pipe for
recursive make invocations
Project: make
Submitted by: kevinbuettner
Submitted on: Thu 23 Apr 2020 09:58:58 PM UTC
Severity: 3 - Normal
Item Group: Bug
Status: None
Privacy: Public
Assigned to: None
Open/Closed: Open
Discussion Lock: Any
Component Version: 4.3
Operating System: POSIX-Based
Fixed Release: None
Triage Status: None
_______________________________________________________
Details:
In make version 4.3, there are circumstances in which the jobserver pipe FDs
are not closed when invoking a job that's not a recursive make invocation.
This happens when invoking make from the top-level make and then starting
another (non-make) job.
I have a test case which causes "make -j4" to hang on 4.3, but not on 4.2.1.
Download the attachment make-cloexec-bug.tgz, and do the following:
[kevinb-fedora@rawhide-1 ~]$ tar xf make-cloexec-bug.tgz
[kevinb-fedora@rawhide-1 ~]$ cd make-cloexec-bug
[kevinb-fedora@rawhide-1 make-cloexec-bug]$ make -j4
sleep 2; echo a
sleep 1; echo b
make -C looper
make[1]: Entering directory '/home/kevinb-fedora/make-cloexec-bug/looper'
gcc -o looper looper.c
./looper
In looper; do...
kill -KILL 2360472
...when done.
make[1]: Leaving directory '/home/kevinb-fedora/make-cloexec-bug/looper'
b
a
^C
[kevinb-fedora@rawhide-1 make-cloexec-bug]$ make --version
GNU Make 4.3
Built for x86_64-redhat-linux-gnu
Copyright (C) 1988-2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[kevinb-fedora@rawhide-1 make-cloexec-bug]$ kill -KILL 2360472
Note that I needed to interrupt the "make -j4" invocation with Ctrl-C in order
to get back to the shell.
This problem occurs for me on current Fedora rawhide using
make-4.3-1.fc33.x86_64, but I have also reproduced it using make built from
git sources; "make --version" shows 4.3.90 for the git version.
---
Here's what a successful / non-buggy run looks like when using make 4.2.1 on
Fedora 31:
[kevinb-fedora@f31-1 ~]$ tar xf make-cloexec-bug.tgz
[kevinb-fedora@f31-1 ~]$ cd make-cloexec-bug
[kevinb-fedora@f31-1 make-cloexec-bug]$ make -j4
sleep 2; echo a
sleep 1; echo b
make -C looper
make[1]: Entering directory '/home/kevinb-fedora/make-cloexec-bug/looper'
gcc -o looper looper.c
./looper
In looper; do...
kill -KILL 814945
...when done.
make[1]: Leaving directory '/home/kevinb-fedora/make-cloexec-bug/looper'
b
a
[kevinb-fedora@f31-1 make-cloexec-bug]$ make --version
GNU Make 4.2.1
Built for x86_64-redhat-linux-gnu
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[kevinb-fedora@f31-1 make-cloexec-bug]$ kill -KILL 814945
Note that I did NOT need to interrupt make with Ctrl-C in this run.
I have a patch for this bug. I'll attach/upload it after the bug is
submitted. (I want to be able to put the bug ID into the commit log.)
_______________________________________________________
File Attachments:
-------------------------------------------------------
Date: Thu 23 Apr 2020 09:58:58 PM UTC Name: make-cloexec-bug.tgz Size: 559B
By: kevinbuettner
<http://savannah.gnu.org/bugs/download.php?file_id=48915>
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?58232>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/
- [bug #58232] FD_CLOEXEC not initialized on jobserver pipe for recursive make invocations,
Kevin Buettner <=