Merge branch 'jc/squash'
[gitweb.git] / connect.c
index eca94f75485ecf6ac585e3e6c8d12f7978b24f06..66e78a29054a121c92beca3d997105f0137c170d 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -8,6 +8,7 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <netdb.h>
+#include <signal.h>
 
 static char *server_capabilities = NULL;
 
@@ -581,6 +582,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 +663,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));