From 8f9a53258b02083edf3044eb59515b06669b9126 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 6 Apr 2016 17:59:14 -0700 Subject: [PATCH] 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 --- tools/makeparallel/makeparallel.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/makeparallel/makeparallel.cpp b/tools/makeparallel/makeparallel.cpp index 3c39846ec..c70fa9a78 100644 --- a/tools/makeparallel/makeparallel.cpp +++ b/tools/makeparallel/makeparallel.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -343,6 +344,15 @@ int main(int argc, char* argv[]) { // child unsetenv("MAKEFLAGS"); 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()); if (ret < 0) { error(errno, errno, "exec %s failed", path);