xslate / p5-Mouse

Lightweight class builder for Perl, as a subset of Moose
https://metacpan.org/release/Mouse
Other
46 stars 32 forks source link

No $self in sub() with lazy => 1 and mod_perl with Apache MPM worker #28

Open coudot opened 10 years ago

coudot commented 10 years ago

We have a strange bug in LemonLDAP::NG: https://jira.ow2.org/browse/LEMONLDAP-723

It seems that Mouse, with Perl v5.10.1, running inside Apache mod_perl with the MPM worker cannot run this kind of code:

has 'registerUrl' => (
    is      => 'rw',
    isa     => 'Str',
    default => sub {
        my $self = shift;
        return $self->portal . "register.pl";
    },
    lazy          => 1,
    documentation => 'URL of register page',
);

The error we see in Apache is:

[Tue Jul 15 14:12:17 2014] [error] Exception caught: Can't call method "portal" on an undefined value at /usr/share/perl5/vendor_perl/Lemonldap/NG/Common/Conf/Attributes.pm line 951.\n

I tried to use Mouse 2.3.0, but same error.

I can't reprodure with a more recent version of Perl (v5.18.2), or with MPM prefork.

Clément.

gfx commented 10 years ago

Hmm, I think it is intended. How about Moose?

coudot commented 10 years ago

We don't use Moose to have a lighter memory use, but I can maybe give a try.

Why do you say it's intended? Seems to work well on recent Perl.

gfx commented 10 years ago

Oh, I'm sorry I didn't see what you said, "I can't reprodure with a more recent version of Perl (v5.18.2)".

It looks a bug and should be fixed.

syohex commented 10 years ago

@coudot Can this bug reproduce without Apachie mod_perl ?

There are some tests which uses lazy and subroutine argument of default attribute, for example t/200_examples/0071_Child_Parent_attr_inherit_imm.t. However such tests are passed on Perl 5.10.1.

coudot commented 10 years ago

Sadly, the bug occurs only in mod_perl, with MPM worker, with quite old Perl version (5.10). It works well on the same system with MPM prefork.

I can reproduce the bug on CentOS 6 with standard packages.

pwr22 commented 9 years ago

Hmmm, MPM worker uses multiple threads iirc, I wonder if this related to the issues here? https://github.com/gfx/p5-Mouse/issues/29

syohex commented 9 years ago

Thread issue was fixed at #50. Please check latest version again