Subject: Re: [PATCH] t5570: forward git-daemon messages in a different way

From: Clemens Buchacher <[email-masked]>
Date: Tue, 17 Apr 2012 00:44:25 +0200

On Mon, Apr 16, 2012 at 01:42:30PM -0400, Jeff King wrote:
> 
> Hmm. t5570 seems to pass reliably on dash for me with:
> 
> diff --git a/t/lib-git-daemon.sh b/t/lib-git-daemon.sh
> index ef2d01f..9f52cb6 100644
> --- a/t/lib-git-daemon.sh
> +++ b/t/lib-git-daemon.sh
> @@ -33,7 +33,7 @@ start_git_daemon() {
>  	{
>  		read line
>  		echo >&4 "$line"
> -		cat >&4 &
> +		cat >&4 <git_daemon_output &
>  
>  		# Check expected output
>  		if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble"

Yes, me too. I can reproduce reliably with dash and the above fixes it
reliably.

> But the test above does fail.

Which one do you mean? The output check works for me.

> Is it purely luck of the timing that git-daemon never gets SIGPIPE? I
> guess the problem is that the {}-section can finish before "cat
> <git_daemon_output" has actually opened the pipe?

No clue. But shouldn't the fork return only after the fd's have been
opened successfully? If I change cat to "(echo di; cat; echo do); sleep
1; pgrep yes", then one can see that cat terminates right away, even
though yes is still running. It's as if cat never gets to read from the
pipe, but from /dev/null instead. A bug in dash?

> I'd just feel better about the solution if we were sure we understood
> the exact problem.

Yeah. I have to admit that I have a strongly empirical approach to these
things and no true understanding of the inner workings.