From: Nicholas Clark Date: Fri, 12 Sep 2008 08:52:50 +0000 (+0000) Subject: Need to free the isa lookup hash before rebuilding it. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=5782d502273e5b6d06607ebe625248c4c102d93b;p=p5sagit%2Fp5-mst-13.2.git Need to free the isa lookup hash before rebuilding it. p4raw-id: //depot/perl@34355 --- diff --git a/mro.c b/mro.c index da30c4d..4d7ade5 100644 --- a/mro.c +++ b/mro.c @@ -546,6 +546,10 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash) SvREFCNT_dec((SV*)meta->mro_linear_c3); meta->mro_linear_dfs = NULL; meta->mro_linear_c3 = NULL; + if (meta->isa) { + SvREFCNT_dec(meta->isa); + meta->isa = NULL; + } /* Inc the package generation, since our @ISA changed */ meta->pkg_gen++; diff --git a/t/op/universal.t b/t/op/universal.t index 83916ee..f1c0323 100755 --- a/t/op/universal.t +++ b/t/op/universal.t @@ -10,7 +10,7 @@ BEGIN { require "./test.pl"; } -plan tests => 112; +plan tests => 116; $a = {}; bless $a, "Bob"; @@ -234,3 +234,14 @@ like( $@, qr/Can't call method "DOES" on unblessed reference/, # http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2001-05/msg01710.html # but never actually tested. is(UNIVERSAL->can("NoSuchPackage::foo"), undef); + +@splatt::ISA = 'zlopp'; +ok (splatt->isa('zlopp')); +ok (!splatt->isa('plop')); + +# This should reset the ->isa lookup cache +@splatt::ISA = 'plop'; +# And here is the new truth. +ok (!splatt->isa('zlopp')); +ok (splatt->isa('plop')); +