It was only reference-counted in the main thread:
$ ./perl -Ilib -e 'delete $::{INC}; eval q"my $foo : bar"'
$ ./perl -Ilib -e 'use threads; async {delete $::{INC}; eval q"my $foo : bar"}->join'
Assertion failed: (SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV), function S_apply_attrs_my, file op.c, line 2600.
Abort trap: 6
PL_initav = NULL;
/* shortcuts just get cleared */
- PL_incgv = NULL;
PL_hintgv = NULL;
PL_errgv = NULL;
PL_argvoutgv = NULL;
PL_debstash = NULL;
SvREFCNT_dec(PL_envgv);
+ SvREFCNT_dec(PL_incgv);
SvREFCNT_dec(PL_argvgv);
SvREFCNT_dec(PL_replgv);
SvREFCNT_dec(PL_DBgv);
SvREFCNT_dec(PL_DBline);
SvREFCNT_dec(PL_DBsub);
PL_envgv = NULL;
+ PL_incgv = NULL;
PL_argvgv = NULL;
PL_replgv = NULL;
PL_DBgv = NULL;
#endif
PL_envgv = gv_dup_inc(proto_perl->Ienvgv, param);
- PL_incgv = gv_dup(proto_perl->Iincgv, param);
+ PL_incgv = gv_dup_inc(proto_perl->Iincgv, param);
PL_hintgv = gv_dup_inc(proto_perl->Ihintgv, param);
PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
PL_diehook = sv_dup_inc(proto_perl->Idiehook, param);
skip_all_without_config('useithreads');
skip_all_if_miniperl("no dynamic loading on miniperl, no threads");
- plan(26);
+ plan(27);
}
use strict;
is $::hypogamma, 3, 'globs cloned and joined are not recloned';
}
+fresh_perl_is(
+ 'use threads;' .
+ 'async { delete $::{INC}; eval q"my $foo : bar" } ->join; print "ok\n";',
+ "ok",
+ {},
+ 'no crash when deleting $::{INC} in thread'
+);
+
# EOF