Merge branch 'jk/git-connection-deadlock-fix'
authorJunio C Hamano <gitster@pobox.com>
Fri, 20 May 2011 03:37:20 +0000 (20:37 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 20 May 2011 03:37:20 +0000 (20:37 -0700)
* jk/git-connection-deadlock-fix:
  test core.gitproxy configuration
  send-pack: avoid deadlock on git:// push with failed pack-objects
  connect: let callers know if connection is a socket
  connect: treat generic proxy processes like ssh processes

Conflicts:
connect.c

1  2 
builtin/send-pack.c
cache.h
connect.c

Simple merge
diff --cc cache.h
+++ b/cache.h
@@@ -972,9 -863,9 +972,10 @@@ struct ref 
  extern struct ref *find_ref_by_name(const struct ref *list, const char *name);
  
  #define CONNECT_VERBOSE       (1u << 0)
 +extern char *git_getpass(const char *prompt);
  extern struct child_process *git_connect(int fd[2], const char *url, const char *prog, int flags);
  extern int finish_connect(struct child_process *conn);
+ extern int git_connection_is_socket(struct child_process *conn);
  extern int path_match(const char *path, int nr, char **match);
  struct extra_have_objects {
        int nr, alloc;
diff --cc connect.c
+++ b/connect.c
@@@ -395,14 -403,31 +395,15 @@@ static int git_use_proxy(const char *ho
        return (git_proxy_command && *git_proxy_command);
  }
  
- static void git_proxy_connect(int fd[2], char *host)
+ static struct child_process *git_proxy_connect(int fd[2], char *host)
  {
        const char *port = STR(DEFAULT_GIT_PORT);
-       const char *argv[4];
-       struct child_process proxy;
 -      char *colon, *end;
+       const char **argv;
+       struct child_process *proxy;
  
 -      if (host[0] == '[') {
 -              end = strchr(host + 1, ']');
 -              if (end) {
 -                      *end = 0;
 -                      end++;
 -                      host++;
 -              } else
 -                      end = host;
 -      } else
 -              end = host;
 -      colon = strchr(end, ':');
 -
 -      if (colon) {
 -              *colon = 0;
 -              port = colon + 1;
 -      }
 +      get_host_and_port(&host, &port);
  
+       argv = xmalloc(sizeof(*argv) * 4);
        argv[0] = git_proxy_command;
        argv[1] = host;
        argv[2] = port;