Re: Gitweb giving me some warnings in Apache's error_log
- From
Mark Rada <markrada26@gmail.com>
- Date
- Aug 7, 2009, 17:56 UTC
- Message-ID
- <88f4c4ee0908071056g5d9da83ft77d56ec2e5e84bac@mail.gmail.com>
- In-Reply-To
- <m3my6bpv6v.fsf@localhost.localdomain>
Let me double check my understanding.
The warnings will not occur if Gitweb is run as a regular CGI script because then it won't be nested inside a call from ModPerl::Registry?
Will it also not complain if I provided my own $project_list in the first place?
Also, I looked at some examples from the second and third page of an article on the subject, http://www.perl.com/pub/a/2002/05/07/mod_perl.html? and it looks "fixable". Is there a particular reason why any of them are not desirable?
Note: I haven't tried anything yet, just wondering if you know off hand
-- Mark A Rada (ferrous26) marada@uwaterloo.ca
On Fri, Aug 7, 2009 at 10:14 AM, Jakub Narebski<jnareb@gmail.com> wrote:
Show 54 quoted lines
> Mark A Rada <markrada26@gmail.com> writes:
>
>> It doesn't seem to cause any other problems, but I don't know if it is
>> significant or not.
>>
>> [Fri Aug 7 08:51:13 2009] gitweb.cgi: Variable "$project_maxdepth"
>> may be unavailable at /var/www/private/gitweb/cgi-bin/gitweb.cgi line
>> 2296.
>> [Fri Aug 7 08:51:13 2009] gitweb.cgi: Variable "$projectroot" may be
>> unavailable at /var/www/private/gitweb/cgi-bin/gitweb.cgi line 2304.
>>
>>
>> Apache 2.2.12/ mod_perl 2.04/ perl 5.8.8
>
> From perldiag(1) manpage:
>
> Variable "%s" may be unavailable
>
> (W closure) An inner (nested) anonymous subroutine is inside a
> named subroutine, and outside that is another subroutine; and the
> anonymous (innermost) subroutine is referencing a lexical variable
> defined in the outermost subroutine. For example:
>
> sub outermost { my $a; sub middle { sub { $a } } }
>
> If the anonymous subroutine is called or referenced (directly or
> indirectly) from the outermost subroutine, it will share the
> variable as you would expect. But if the anonymous subroutine is
> called or referenced when the outermost subroutine is not active,
> it will see the value of the shared variable as it was before and
> during the *first* call to the outermost subroutine, which is
> probably not what you want.
>
> In these circumstances, it is usually best to make the middle
> subroutine anonymous, using the "sub {}" syntax. Perl has
> specific support for shared variables in nested anonymous
> subroutines; a named subroutine in between interferes with this
> feature.
>
> The warning is about 'wanted' anonymous subroutine passed to
> File::Find::find. The "middle" subroutine is git_get_projects_list,
> and the "outermost" is mod_perl / ModPerl::Registry request loop.
>
> We can't make git_get_projects_list anonymous, but anonymous
> subroutine is not called or referenced outside git_get_projects_list,
> nor it is called or referenced outside mod_perl request/event loop.
>
> This warning is harmless... but I do not know how to silence it.
>
> --
> Jakub Narebski
> Poland
> ShadeHawk on #git
>