Hi, On Sun, 11 Mar 2007, H. Peter Anvin wrote: > Junio C Hamano wrote: > > > > > The process spends effectively forever waiting in on the fflush() in > > > show_commit() (in upload-pack.c); /proc/*/fd shows it is trying to > > > write to a pipe, but I'm not sure what is at the other end of that > > > same pipe. > > > > The process forks and the one that runs show_commit() is running > > rev-list internally while the other end is a pack-objects that > > reads from it and sends its output back to the client. > > > > Now, given that the fact that the git-pack-object process has already died, > normally one would expect the write() to get SIGPIPE which would kill the > process. Does git-upload-pack not close the read end of the pipe in the > writer? From the looks of the fd directory, I would say it does not. Something like this (totally untested): upload-pack.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/upload-pack.c b/upload-pack.c index 498bf50..bafd90f 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -119,6 +119,8 @@ static void create_pack_file(void) int i; struct rev_info revs; + close(0); + pack_pipe = fdopen(lp_pipe[1], "w"); if (create_full_pack) @@ -167,6 +169,10 @@ static void create_pack_file(void) const char *argv[10]; int i = 0; + close(0); + close(1); + close(2); + dup2(lp_pipe[0], 0); dup2(pu_pipe[1], 1); dup2(pe_pipe[1], 2); Ciao, Dscho - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html