X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=gv.c;h=d02f741e44c1442b08f56bfe988663ed6dde65f7;hb=c5375c28ff9f285618d7079f4044f72aad1773ab;hp=a458159d76b059f8ae13bb2a7cde80d2aef8bb5e;hpb=69ecfd1277806cc4f0867436789903927289b9b2;p=p5sagit%2Fp5-mst-13.2.git diff --git a/gv.c b/gv.c index a458159..d02f741 100644 --- a/gv.c +++ b/gv.c @@ -215,7 +215,7 @@ Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi) GvSTASH(gv) = stash; if (stash) Perl_sv_add_backref(aTHX_ (SV*)stash, (SV*)gv); - gv_name_set(gv, name, len, 0); + gv_name_set(gv, name, len, GV_ADD); if (multi || doproto) /* doproto means it _was_ mentioned */ GvMULTI_on(gv); if (doproto) { /* Replicate part of newSUB here. */ @@ -2114,6 +2114,10 @@ Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags) if (len > I32_MAX) Perl_croak(aTHX_ "panic: gv name too long (%"UVuf")", (UV) len); + if (!(flags & GV_ADD) && GvNAME_HEK(gv)) { + unshare_hek(GvNAME_HEK(gv)); + } + PERL_HASH(hash, name, len); GvNAME_HEK(gv) = name ? share_hek(name, len, hash) : 0; }