:-> "Geoffrey" == Geoffrey Young <[EMAIL PROTECTED]> writes:
>> With this setup, the error message changes: >> Now I have: >> [Sun Nov 9 20:17:26 2003] [error] Can't call method "content_type" >> on an undefined value at /usr/local/lib/site_perl/bug130883/Impl1.pm >> line 10. >> when I try to access /R > that error makes more sense. > here, what is happening is that your handler is being called, but not > as a method handler - meaning the > my $self = shift; > in Impl1::handler() is getting $r, thus leaving the call to > my $req = shift; > with an empty argument list. > ok, if you could try a few things for me, that would be great. > first, try prototyping all the method handlers with > sub handler : method { > instead of using ($$). Hello, sorry for the late reply but I had 2 very bad days at work :( I've tried replacing '($$)' with ': method' and I now get this when accessing /R [Wed Nov 12 08:11:37 2003] [error] Can't locate object method "internal_redirect" via package "bug130883::Redir" at /usr/local/lib/site_perl/bug130883/Redir.pm line 9. I'll try the patch later. Pf > next, try applying the attached patch and see if it helps at all (both > with $$ and : method). > thanks > --Geoff > Index: src/modules/perl/mod_perl.c > =================================================================== > RCS file: /home/cvspublic/modperl/src/modules/perl/mod_perl.c,v > retrieving revision 1.147 > diff -u -r1.147 mod_perl.c > --- src/modules/perl/mod_perl.c 2 Oct 2003 21:30:35 -0000 1.147 > +++ src/modules/perl/mod_perl.c 9 Nov 2003 21:59:05 -0000 > @@ -1231,20 +1231,33 @@ > if (gvp) cv = GvCV(gvp); > } > + if (cv != NULL) { > + is_method = perl_cv_ismethod(cv); > + } > + > + MP_TRACE_h(fprintf(stderr, "checking if `%s' is a method...%s\n", > + sub, (is_method ? "yes" : "no"))); > + SvREFCNT_dec(sv); > + return is_method; > +} > + > +int perl_cv_ismethod(CV *cv) > +{ > + int is_method=0; > + > #ifdef CVf_METHOD > if (cv && (CvFLAGS(cv) & CVf_METHOD)) { > is_method = 1; > } > #endif > + > if (!is_method && (cv && SvPOK(cv))) { > is_method = strnEQ(SvPVX(cv), "$$", 2); > } > - MP_TRACE_h(fprintf(stderr, "checking if `%s' is a method...%s\n", > - sub, (is_method ? "yes" : "no"))); > - SvREFCNT_dec(sv); > return is_method; > } > + > #endif > void mod_perl_noop(void *data) {} > @@ -1486,6 +1499,7 @@ > HV *stash = Nullhv; > SV *pclass = newSVsv(sv), *dispsv = Nullsv; > CV *cv = Nullcv; > + GV *gv = Nullgv; > char *method = "handler"; > int defined_sub = 0, anon = 0; > char *dispatcher = NULL; > @@ -1620,8 +1634,27 @@ > #endif > } > else { > - MP_TRACE_h(fprintf(stderr, "perl_call: handler is a %s\n", > - dispatcher ? "dispatcher" : "cached CV")); > + if (!dispatcher) { > + MP_TRACE_h(fprintf(stderr, "perl_call: handler is a cached CV\n")); > +#ifdef PERL_METHOD_HANDLERS > + cv = sv_2cv(sv, &stash, &gv, FALSE); > + > + if (cv != NULL) { > + is_method = perl_cv_ismethod(cv); > + } > + > + if (is_method) { > + sv_setpv(pclass, HvNAME(stash)); > + method = GvNAME(CvGV(cv)); > + } > + > + MP_TRACE_h(fprintf(stderr, "checking if CV is a method...%s\n", > + (is_method ? "yes" : "no"))); > +#endif > + } > + else { > + MP_TRACE_h(fprintf(stderr, "perl_call: handler is a dispatcher\n")); > + } > } > callback: > -- > Reporting bugs: http://perl.apache.org/bugs/ > Mail list info: http://perl.apache.org/maillist/modperl.html -- ------------------------------------------------------------------------------- Pierfrancesco Caci | ik5pvx | mailto:[EMAIL PROTECTED] - http://gusp.dyndns.org Firenze - Italia | Office for the Complication of Otherwise Simple Affairs Linux penny 2.6.0-test9 #1 Fri Oct 31 22:51:12 CET 2003 i686 GNU/Linux -- Reporting bugs: http://perl.apache.org/bugs/ Mail list info: http://perl.apache.org/maillist/modperl.html