X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FModule.pm;h=16ca1190d2fc64513e7a26278e7a64bc5fcf453f;hb=1038bfa9e8a49b9c9f9ce872c46800f9590da8ed;hp=68f100fcc60817395d0ffa5a04705877783d065d;hpb=806806614368604f49f5e27bf64d1b8d96241177;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Meta/Module.pm b/lib/Mouse/Meta/Module.pm index 68f100f..16ca119 100755 --- a/lib/Mouse/Meta/Module.pm +++ b/lib/Mouse/Meta/Module.pm @@ -15,7 +15,7 @@ if(Mouse::Util::MOUSE_XS){ } sub _metaclass_cache { # DEPRECATED - my($class, $name) = @_; + my($self, $name) = @_; Carp::cluck('_metaclass_cache() has been deprecated. Use Mouse::Util::get_metaclass_by_name() instead'); return $METAS{$name}; } @@ -231,7 +231,7 @@ sub create { Scalar::Util::weaken $METAS{$package_name} if $mortal; - $meta->add_method(meta => sub{ + $meta->add_method(meta => sub { $self->initialize(ref($_[0]) || $_[0]); }); @@ -283,6 +283,13 @@ sub DESTROY{ return if !$serial_id; # mortal anonymous class + # XXX: cleaning stash with threads causes panic/SEGV. + if(exists $INC{'threads.pm'}) { + # (caller)[2] indicates the caller's line number, + # which is zero when the current thread is joining. + return if( (caller)[2] == 0); + } + # @ISA is a magical variable, so we clear it manually. @{$self->{superclasses}} = () if exists $self->{superclasses}; @@ -293,7 +300,6 @@ sub DESTROY{ delete $METAS{$name}; $name =~ s/ $serial_id \z//xms; - no strict 'refs'; delete ${$name}{ $serial_id . '::' }; @@ -301,7 +307,7 @@ sub DESTROY{ } sub throw_error{ - my($class, $message, %args) = @_; + my($self, $message, %args) = @_; local $Carp::CarpLevel = $Carp::CarpLevel + 1 + ($args{depth} || 0); local $Carp::MaxArgNums = 20; # default is 8, usually we use named args which gets messier though @@ -323,7 +329,7 @@ Mouse::Meta::Module - The base class for Mouse::Meta::Class and Mouse::Meta::Rol =head1 VERSION -This document describes Mouse version 0.50_07 +This document describes Mouse version 0.65 =head1 SEE ALSO