diff options
author | Dave Mitchell <davem@fdisolutions.com> | 2004-01-17 23:58:04 +0000 |
---|---|---|
committer | Dave Mitchell <davem@fdisolutions.com> | 2004-01-17 23:58:04 +0000 |
commit | 58ed4fbe7c01c6db6f9e39be1bc81fb0854d3801 (patch) | |
tree | dd75a41c9d250b4665f73299d71958c15b61a2bf | |
parent | 8f8d40ab34e002001c7e6f500a987fa1dfb3bd78 (diff) | |
download | perl-58ed4fbe7c01c6db6f9e39be1bc81fb0854d3801.tar.gz |
back out change #22167 "freeing a CV reference that was currently
being executed caused coredumps".
The new test case sometimes locks up linux's malloc, and with
Perl's malloc the test code still coredumps :-(
p4raw-link: @22167 on //depot/perl: b3a3b3a1da8f5142edf3e194532b08316f895282
p4raw-id: //depot/perl@22172
-rw-r--r-- | perl.c | 3 | ||||
-rw-r--r-- | scope.c | 4 | ||||
-rw-r--r-- | scope.h | 1 | ||||
-rw-r--r-- | sv.c | 2 | ||||
-rwxr-xr-x | t/op/closure.t | 14 |
5 files changed, 3 insertions, 21 deletions
@@ -699,9 +699,6 @@ perl_destruct(pTHXx) SvFLAGS(PL_fdpid) |= SVTYPEMASK; /* don't clean out pid table now */ SvFLAGS(PL_strtab) |= SVTYPEMASK; /* don't clean out strtab now */ - PL_comppad = Null(PAD*); - PL_curpad = Null(SV**); - /* the 2 is for PL_fdpid and PL_strtab */ while (PL_sv_count > 2 && sv_clean_all()) ; @@ -1045,10 +1045,8 @@ Perl_leave_scope(pTHX_ I32 base) break; case SAVEt_COMPPAD: PL_comppad = (PAD*)SSPOPPTR; - if (PL_comppad) { + if (PL_comppad) PL_curpad = AvARRAY(PL_comppad); - SvREFCNT_dec(PL_comppad); - } else PL_curpad = Null(SV**); break; @@ -167,7 +167,6 @@ Closing bracket on a callback. See C<ENTER> and L<perlcall>. SSCHECK(2); \ SSPUSHPTR((SV*)PL_comppad); \ SSPUSHINT(SAVEt_COMPPAD); \ - SvREFCNT_inc(PL_comppad); \ } STMT_END #ifdef USE_ITHREADS @@ -10830,7 +10830,7 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param) break; case SAVEt_COMPPAD: av = (AV*)POPPTR(ss,ix); - TOPPTR(nss,ix) = av_dup_inc(av, param); + TOPPTR(nss,ix) = av_dup(av, param); break; case SAVEt_PADSV: longval = (long)POPLONG(ss,ix); diff --git a/t/op/closure.t b/t/op/closure.t index f9da3114e7..2425a59a61 100755 --- a/t/op/closure.t +++ b/t/op/closure.t @@ -13,7 +13,7 @@ BEGIN { use Config; -print "1..186\n"; +print "1..185\n"; my $test = 1; sub test (&) { @@ -668,16 +668,4 @@ __EOF__ END { 1 while unlink $progfile } } -{ - # bugid #24914 = used to coredump restoring PL_comppad in the - # savestack, due to the early freeing of the anon closure - - my $got = runperl(stderr => 1, prog => -'sub d {die} my $f; $f = sub {my $x=1; $f = 0; d}; eval{$f->()}; print qw(ok)' - ); - test { $got eq 'ok' }; -} - - - |