diff --git a/connect.c b/connect.c index 52d709e58d..db7342e4d2 100644 --- a/connect.c +++ b/connect.c @@ -581,6 +581,11 @@ int git_connect(int fd[2], char *url, const char *prog) enum protocol protocol = PROTO_LOCAL; int free_path = 0; + /* Without this we cannot rely on waitpid() to tell + * what happened to our children. + */ + signal(SIGCHLD, SIG_DFL); + host = strstr(url, "://"); if(host) { *host = '\0'; diff --git a/daemon.c b/daemon.c index bdfe80d2e4..a19b7b5aaa 100644 --- a/daemon.c +++ b/daemon.c @@ -673,6 +673,11 @@ int main(int argc, char **argv) int inetd_mode = 0; int i; + /* Without this we cannot rely on waitpid() to tell + * what happened to our children. + */ + signal(SIGCHLD, SIG_DFL); + for (i = 1; i < argc; i++) { char *arg = argv[i]; diff --git a/merge-index.c b/merge-index.c index 024196e7ac..190e12fb7c 100644 --- a/merge-index.c +++ b/merge-index.c @@ -99,6 +99,11 @@ int main(int argc, char **argv) { int i, force_file = 0; + /* Without this we cannot rely on waitpid() to tell + * what happened to our children. + */ + signal(SIGCHLD, SIG_DFL); + if (argc < 3) usage("git-merge-index [-o] [-q] (-a | *)");