Subject: Re: [PATCH 09/18] gitweb: Revert reset_output() back to original code

From: Jakub Narebski <[email-masked]>
Date: Thu, 09 Dec 2010 15:58:41 -0800 (PST)

"John 'Warthog9' Hawley" <[email-masked]> writes:

> Reverted change to reset_output as
> 
> 	open STDOUT, ">&", \*STDOUT_REAL;

For somebody not following our discussion the above would be very,
very cryptic... though I suppose this would be squashed in final
(ready to be merged in) version of the code.
 
> causes assertion failures:
> 
> 	Assertion !((((s->var)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((s->var)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((s->var)->sv_flags & 0xff)) == SVt_PVLV)) failed: file "scalar.xs", line 49 at gitweb.cgi line 1221.

It looks like bug in Perl, because it should give some kind of Perl
error, not failed assertion from within guts of Perl C code.

Which Perl version are you using?

> if we encounter an error *BEFORE* we've ever changed the output.

And how to reproduce this error (i.e. how did you found it)?
 
> Signed-off-by: John 'Warthog9' Hawley <[email-masked]>
> ---
>  gitweb/gitweb.perl |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 1d8bc74..e8c028b 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -1225,7 +1225,7 @@ sub change_output {
>  
>  sub reset_output {
>  	# This basically takes STDOUT_REAL and puts it back as STDOUT
> -	open STDOUT, ">&", \*STDOUT_REAL;
> +	open(STDOUT,">&STDOUT_REAL");

Hmmm... how to silence spurious warning then:

  gitweb.perl: Name "main::STDOUT_REAL" used only once: possible typo
  at ../gitweb/gitweb.perl line 1130.

-- 
Jakub Narebski
Poland
ShadeHawk on #git