git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* git-upload-pack: the timeout gets corrupted?!
@ 2007-03-11  1:45 H. Peter Anvin
  2007-03-11  5:56 ` Junio C Hamano
  2007-03-11 17:23 ` H. Peter Anvin
  0 siblings, 2 replies; 10+ messages in thread
From: H. Peter Anvin @ 2007-03-11  1:45 UTC (permalink / raw)
  To: Git Mailing List

git-1.5.0.3-1.i386 rpm from Junio's repository on kernel.org:

Since we got the new git server on kernel.org, we are having a problem 
with git-upload-pack processes getting reparented to init, and then 
sitting there forever.  Going in with gdb, it appears the "timeout" 
variable gets overwritten:

(gdb) p timeout
$1 = 608471321

... which should have been 600.

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.

	-hpa

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: git-upload-pack: the timeout gets corrupted?!
  2007-03-11  1:45 git-upload-pack: the timeout gets corrupted?! H. Peter Anvin
@ 2007-03-11  5:56 ` Junio C Hamano
  2007-03-11  9:13   ` H. Peter Anvin
                     ` (2 more replies)
  2007-03-11 17:23 ` H. Peter Anvin
  1 sibling, 3 replies; 10+ messages in thread
From: Junio C Hamano @ 2007-03-11  5:56 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Git Mailing List

"H. Peter Anvin" <hpa@zytor.com> writes:

> ...  Going in with gdb, it appears the "timeout"
> variable gets overwritten:
>
> (gdb) p timeout
> $1 = 608471321
>
> ... which should have been 600.

I do not see offhand what can cause this.  The only new code
since 1.4.4 series is "shallow clone" stuff,...

> 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.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: git-upload-pack: the timeout gets corrupted?!
  2007-03-11  5:56 ` Junio C Hamano
@ 2007-03-11  9:13   ` H. Peter Anvin
  2007-03-11  9:23   ` H. Peter Anvin
  2007-03-11 17:18   ` H. Peter Anvin
  2 siblings, 0 replies; 10+ messages in thread
From: H. Peter Anvin @ 2007-03-11  9:13 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Git Mailing List

Junio C Hamano wrote:
> "H. Peter Anvin" <hpa@zytor.com> writes:
> 
>> ...  Going in with gdb, it appears the "timeout"
>> variable gets overwritten:
>>
>> (gdb) p timeout
>> $1 = 608471321
>>
>> ... which should have been 600.
> 
> I do not see offhand what can cause this.  The only new code
> since 1.4.4 series is "shallow clone" stuff,...
> 
>> 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.
> 

Yup; the pack-objects process has apparently died.

	-hpa

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: git-upload-pack: the timeout gets corrupted?!
  2007-03-11  5:56 ` Junio C Hamano
  2007-03-11  9:13   ` H. Peter Anvin
@ 2007-03-11  9:23   ` H. Peter Anvin
  2007-03-11 12:14     ` Johannes Schindelin
  2007-03-11 17:18   ` H. Peter Anvin
  2 siblings, 1 reply; 10+ messages in thread
From: H. Peter Anvin @ 2007-03-11  9:23 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Git Mailing List

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.

	-hpa

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: git-upload-pack: the timeout gets corrupted?!
  2007-03-11  9:23   ` H. Peter Anvin
@ 2007-03-11 12:14     ` Johannes Schindelin
  2007-03-11 16:01       ` H. Peter Anvin
  0 siblings, 1 reply; 10+ messages in thread
From: Johannes Schindelin @ 2007-03-11 12:14 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Junio C Hamano, Git Mailing List

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

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: git-upload-pack: the timeout gets corrupted?!
  2007-03-11 12:14     ` Johannes Schindelin
@ 2007-03-11 16:01       ` H. Peter Anvin
  2007-03-11 22:01         ` Johannes Schindelin
  0 siblings, 1 reply; 10+ messages in thread
From: H. Peter Anvin @ 2007-03-11 16:01 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Junio C Hamano, Git Mailing List

Johannes Schindelin wrote:
> 
> 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)

Shouldn't that be close(lp_pipe[0]);?

> @@ -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);
> 

Those close()'s are redundant with the dup2's...

	-hpa

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: git-upload-pack: the timeout gets corrupted?!
  2007-03-11  5:56 ` Junio C Hamano
  2007-03-11  9:13   ` H. Peter Anvin
  2007-03-11  9:23   ` H. Peter Anvin
@ 2007-03-11 17:18   ` H. Peter Anvin
  2 siblings, 0 replies; 10+ messages in thread
From: H. Peter Anvin @ 2007-03-11 17:18 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Git Mailing List

Junio C Hamano wrote:
> "H. Peter Anvin" <hpa@zytor.com> writes:
> 
>> ...  Going in with gdb, it appears the "timeout"
>> variable gets overwritten:
>>
>> (gdb) p timeout
>> $1 = 608471321
>>
>> ... which should have been 600.
> 
> I do not see offhand what can cause this.  The only new code
> since 1.4.4 series is "shallow clone" stuff,...

Well, we changed servers from an x86-64 box to an i386 box, so we're 
definitely running different binaries.

	-hpa

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: git-upload-pack: the timeout gets corrupted?!
  2007-03-11  1:45 git-upload-pack: the timeout gets corrupted?! H. Peter Anvin
  2007-03-11  5:56 ` Junio C Hamano
@ 2007-03-11 17:23 ` H. Peter Anvin
  2007-03-11 17:37   ` H. Peter Anvin
  1 sibling, 1 reply; 10+ messages in thread
From: H. Peter Anvin @ 2007-03-11 17:23 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Git Mailing List

H. Peter Anvin wrote:
> git-1.5.0.3-1.i386 rpm from Junio's repository on kernel.org:
> 
> Since we got the new git server on kernel.org, we are having a problem 
> with git-upload-pack processes getting reparented to init, and then 
> sitting there forever.  Going in with gdb, it appears the "timeout" 
> variable gets overwritten:
> 
> (gdb) p timeout
> $1 = 608471321
> 
> ... which should have been 600.
> 
> 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.
> 

Another observation:

The value is always 608471321 (0x24448919) across all stuck processes 
that I've examined.  This is neither a recent time_t value (it would be 
Thu Apr 13 11:48:41 UTC 1989) nor is it a valid pointer value in any of 
the processes I've looked at.

	-hpa

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: git-upload-pack: the timeout gets corrupted?!
  2007-03-11 17:23 ` H. Peter Anvin
@ 2007-03-11 17:37   ` H. Peter Anvin
  0 siblings, 0 replies; 10+ messages in thread
From: H. Peter Anvin @ 2007-03-11 17:37 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Git Mailing List

H. Peter Anvin wrote:
> Another observation:
> 
> The value is always 608471321 (0x24448919) across all stuck processes 
> that I've examined.  This is neither a recent time_t value (it would be 
> Thu Apr 13 11:48:41 UTC 1989) nor is it a valid pointer value in any of 
> the processes I've looked at.

Nevermind!  I just noticed that git-debuginfo RPM isn't from the same 
build as the git-core RPM, so anything obtained with gdb is baloney...

	-hpa

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: git-upload-pack: the timeout gets corrupted?!
  2007-03-11 16:01       ` H. Peter Anvin
@ 2007-03-11 22:01         ` Johannes Schindelin
  0 siblings, 0 replies; 10+ messages in thread
From: Johannes Schindelin @ 2007-03-11 22:01 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Junio C Hamano, Git Mailing List

Hi,

On Sun, 11 Mar 2007, H. Peter Anvin wrote:

> Johannes Schindelin wrote:
> > 
> > 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)
> 
> Shouldn't that be close(lp_pipe[0]);?

Yes, of course!

> > @@ -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);
> > 
> 
> Those close()'s are redundant with the dup2's...

I didn't know that, but that makes sense.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2007-03-11 22:01 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-11  1:45 git-upload-pack: the timeout gets corrupted?! H. Peter Anvin
2007-03-11  5:56 ` Junio C Hamano
2007-03-11  9:13   ` H. Peter Anvin
2007-03-11  9:23   ` H. Peter Anvin
2007-03-11 12:14     ` Johannes Schindelin
2007-03-11 16:01       ` H. Peter Anvin
2007-03-11 22:01         ` Johannes Schindelin
2007-03-11 17:18   ` H. Peter Anvin
2007-03-11 17:23 ` H. Peter Anvin
2007-03-11 17:37   ` H. Peter Anvin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).