Checking in changes prior to tagging of version 0.61.
[gitmo/Mouse.git] / lib / Mouse / Meta / Module.pm
index 68f100f..317d032 100755 (executable)
@@ -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.61
 
 =head1 SEE ALSO