summaryrefslogtreecommitdiff
path: root/gv.c
diff options
context:
space:
mode:
authorBrian Fraser <fraserbn@gmail.com>2011-07-06 02:36:37 -0300
committerFather Chrysostomos <sprout@cpan.org>2011-10-06 13:01:05 -0700
commitc22420654592c6c91357fd0422495dbfa76ae7c7 (patch)
tree82237aaca9ad87d55ebbd4557d493823c50a4d31 /gv.c
parentca237673de2ae6d81d72101274b0f6cf3a142f44 (diff)
downloadperl-c22420654592c6c91357fd0422495dbfa76ae7c7.tar.gz
gv.c: gp_free UTF8 cleanup
Diffstat (limited to 'gv.c')
-rw-r--r--gv.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gv.c b/gv.c
index 1963e08c17..a63b97605c 100644
--- a/gv.c
+++ b/gv.c
@@ -2112,10 +2112,11 @@ Perl_gp_free(pTHX_ GV *gv)
/* FIXME - another reference loop GV -> symtab -> GV ?
Somehow gp->gp_hv can end up pointing at freed garbage. */
if (hv && SvTYPE(hv) == SVt_PVHV) {
- const char *hvname = HvNAME_get(hv);
- if (PL_stashcache && hvname)
- (void)hv_delete(PL_stashcache, hvname, HvNAMELEN_get(hv),
- G_DISCARD);
+ const HEK *hvname_hek = HvNAME_HEK(hv);
+ if (PL_stashcache && hvname_hek)
+ (void)hv_delete(PL_stashcache, HEK_KEY(hvname_hek),
+ (HEK_UTF8(hvname_hek) ? -HEK_LEN(hvname_hek) : HEK_LEN(hvname_hek)),
+ G_DISCARD);
SvREFCNT_dec(hv);
}
SvREFCNT_dec(io);