git-merge --squash
[gitweb.git] / connect.c
index eca94f75485ecf6ac585e3e6c8d12f7978b24f06..db7342e4d26baa50dd944ebf06fb8b66fea59aaa 100644 (file)
--- 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';
@@ -657,6 +662,8 @@ int git_connect(int fd[2], char *url, const char *prog)
        if (pipe(pipefd[0]) < 0 || pipe(pipefd[1]) < 0)
                die("unable to create pipe pair for communication");
        pid = fork();
+       if (pid < 0)
+               die("unable to fork");
        if (!pid) {
                snprintf(command, sizeof(command), "%s %s", prog,
                         sq_quote(path));