X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Size.xs;h=109dd15fc0f802c16c02838339987696764c25e1;hb=00a70dfae49af9794176b7a836c5e9583e0bb398;hp=6f7d0fb9302bad7a9b694ba85e5c25fa9c69a684;hpb=5a706444d26c2d6694a7244a812d2e387a219aa0;p=p5sagit%2FDevel-Size.git diff --git a/Size.xs b/Size.xs index 6f7d0fb..109dd15 100644 --- a/Size.xs +++ b/Size.xs @@ -518,8 +518,16 @@ op_size(pTHX_ const OP * const baseop, struct state *st) #endif #ifdef USE_ITHREADS check_new_and_strlen(st, basecop->cop_file); +#if PERL_VERSION < 17 || (PERL_VERSION == 17 && PERL_SUBVERSION == 0) + /* This pointer is owned by the COP, and freed with it. */ check_new_and_strlen(st, basecop->cop_stashpv); #else + /* A per-interpreter pointer for this stash is allocated in + PL_stashpad. */ + if (check_new(st, PL_stashpad + basecop->cop_stashoff)) + st->total_size += sizeof(PL_stashpad[basecop->cop_stashoff]); +#endif +#else sv_size(aTHX_ st, (SV *)basecop->cop_filegv, SOME_RECURSION); #endif @@ -699,7 +707,7 @@ sv_size(pTHX_ struct state *const st, const SV * const orig_thing, } st->total_size += sizeof(SV) + body_sizes[type]; - if (type >= SVt_PVMG) { + if (SvMAGICAL(thing)) { magic_size(aTHX_ thing, st); }