diff options
author | Father Chrysostomos <sprout@cpan.org> | 2013-07-05 22:51:50 -0700 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2013-08-09 19:44:13 -0700 |
commit | 1dc74fdba201402174cfbd293adc42f5a0bafc22 (patch) | |
tree | bf675ece5baae52ad8e311dd1b9de36514736c4c /gv.c | |
parent | 449dd03960bf018889fc68eb9ff03ef613eb893b (diff) | |
download | perl-1dc74fdba201402174cfbd293adc42f5a0bafc22.tar.gz |
Revert "[perl #117855] Store CopFILEGV in a pad under ithreads"
This reverts commit c82ecf346.
It turn out to be faulty, because a location shared betweens threads
(the cop) was holding a reference count on a pad entry in a particu-
lar thread. So when you free the cop, how do you know where to do
SvREFCNT_dec?
In reverting c82ecf346, this commit still preserves the bug fix from
1311cfc0a7b, but shifts it around.
Diffstat (limited to 'gv.c')
-rw-r--r-- | gv.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -2105,9 +2105,12 @@ Perl_gv_check(pTHX_ HV *stash) continue; file = GvFILE(gv); CopLINE_set(PL_curcop, GvLINE(gv)); - /* set file name for warning */ - CopFILE_setn(PL_curcop, file, HEK_LEN(GvFILE_HEK(gv))); - SvREFCNT_dec(CopFILEGV(PL_curcop)); +#ifdef USE_ITHREADS + CopFILE(PL_curcop) = (char *)file; /* set for warning */ +#else + CopFILEGV(PL_curcop) + = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0); +#endif Perl_warner(aTHX_ packWARN(WARN_ONCE), "Name \"%"HEKf"::%"HEKf "\" used only once: possible typo", |