makeparallel: reset make's unlimited stack
make 3.81 sets its own stack size to be unlimited, but accidentally leaves it unlimited for all child processes. If it is unlimited, reset it back to a reasonable default (8MB). See http://savannah.gnu.org/bugs/?22010 Change-Id: Ieb0289823f12a421b59d8ab5292d3df3c6dfc27e
This commit is contained in:
parent
a6a6285686
commit
8f9a53258b
|
@ -26,6 +26,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <sys/resource.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
@ -343,6 +344,15 @@ int main(int argc, char* argv[]) {
|
||||||
// child
|
// child
|
||||||
unsetenv("MAKEFLAGS");
|
unsetenv("MAKEFLAGS");
|
||||||
unsetenv("MAKELEVEL");
|
unsetenv("MAKELEVEL");
|
||||||
|
|
||||||
|
// make 3.81 sets the stack ulimit to unlimited, which may cause problems
|
||||||
|
// for child processes
|
||||||
|
struct rlimit rlim{};
|
||||||
|
if (getrlimit(RLIMIT_STACK, &rlim) == 0 && rlim.rlim_cur == RLIM_INFINITY) {
|
||||||
|
rlim.rlim_cur = 8*1024*1024;
|
||||||
|
setrlimit(RLIMIT_STACK, &rlim);
|
||||||
|
}
|
||||||
|
|
||||||
int ret = execvp(path, args.data());
|
int ret = execvp(path, args.data());
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
error(errno, errno, "exec %s failed", path);
|
error(errno, errno, "exec %s failed", path);
|
||||||
|
|
Loading…
Reference in New Issue