HI Stas,

this has its problems too. It dumps core. After starting a server I see:

        Apache::Server::DESTROY

lookup_method finds APR::Pool. And so we call

        APR::Pool::DESTROY

this does not look wrong to me, if APR::Pool has a DESTROY function and 
Apache::Server isa APR::Pool.

here a small part from my coredump.

(gdb) bt
#0  0x40135abe in find_entry (ht=0x80baeb0, key=0x406cf229, klen=14, val=0x0)
    at apr_hash.c:278
#1  0x40135c58 in apr_hash_get (ht=0x80baeb0, key=0x406cf229, klen=-1)
    at apr_hash.c:340
#2  0x40143d4d in apr_pool_userdata_get (data=0xbfffe858,
    key=0x406cf229 "APR::Pool::new", pool=0x2) at apr_pools.c:1879
#3  0x406ce7a8 in XS_APR__Pool_DESTROY ()
   from 
/home/ptest2/lib/perl5/site_perl/5.8.1/i686-linux-thread-multi/auto/APR/Pool/Pool.so
#4  0x4042c3b9 in Perl_pp_goto ()
   from /home/ptest2/lib/perl5/5.8.1/i686-linux-thread-multi/CORE/libperl.so
#5  0x403f803e in Perl_runops_standard ()


and some typos fixed in the test ModPerl::EazyLife.

Am Dienstag, 17. Februar 2004 03:12 schrieb Stas Bekman:
> Stas Bekman wrote:
> [...]
>
> > really, I think it should always be only one matching module, since we
> > have no internal sub-classing at the moment.
>
> Something like so:
>
> package ModPerl::EazyLife;
>
> use ModPerl::MethodLookup ();
> use Carp;
>
> my @avail_modules = ModPerl::MethodLookup::avail_modules();
> push @avail_modules, 'Apache'; # XXX: may go away
> my $skip = qr|(::)?DESTROY$|;
> for my $module (@avail_modules) {
>      *{"$module\::AUTOLOAD"} = sub {
>          my($hint, @modules) =
>              ModPerl::MethodLookup::lookup_method($AUTOLOAD, @_);
>
>          # there should be only one match
>          if (my $module = @modules) {

- if (my $module = @modules) {
+ if (my ($module) = @modules) {

>              eval "require $module";
>              # use the function from the module that we have just loaded
>              $AUTOLOAD =~ s/.*::/$module::/;

- $AUTOLOAD =~ s/.*::/$module::/;
+ $AUTOLOAD =~ s/.*::/${module}::/;

>              goto &$AUTOLOAD;
>          }
>          else {
>              return if $AUTOLOAD =~ /$skip/;
>              croak $hint || "Can't find $AUTOLOAD";
>          }
>      };
> }
>
> 1;

-- 
Boris

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to