From: Nicholas Clark Date: Sat, 25 Jul 2009 16:04:29 +0000 (+0100) Subject: When resetting our children, wipe out the isa cache too. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=1375cf1cf2085f851bb176047d5e60248542f555;p=p5sagit%2Fp5-mst-13.2.git When resetting our children, wipe out the isa cache too. (Fix to change 34354, which introduced a cached hash to make ->isa O(1)) --- diff --git a/mro.c b/mro.c index fe77647..23f8c07 100644 --- a/mro.c +++ b/mro.c @@ -438,7 +438,7 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash) if(meta->mro_nextmethod) hv_clear(meta->mro_nextmethod); /* Iterate the isarev (classes that are our children), - wiping out their linearization and method caches */ + wiping out their linearization, method and isa caches */ if(isarev) { hv_iterinit(isarev); while((iter = hv_iternext(isarev))) { @@ -463,6 +463,10 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash) revmeta->cache_gen++; if(revmeta->mro_nextmethod) hv_clear(revmeta->mro_nextmethod); + if (revmeta->isa) { + SvREFCNT_dec(revmeta->isa); + revmeta->isa = NULL; + } } }