segfault in caller() #15248
segfault in caller() #15248
Comments
From @maukeCreated by @mauke$ perl -e 'END { caller 1 } eval("sub { die }")->()' A threaded/debugging 5.22.1 segfaults at pp_ctl.c:1797: assert(CopSTASH(cx->blk_oldcop)); This seems to be fixed in blead (probably due to the context stack overhaul?). If I used bisect.pl right, the crash was introduced with commit It seems to consistently crash 5.20 and 5.22. ... Taking a closer look, it also crashes 5.16.3 (with threads) and 5.8.9. 5.10.1, 5.12.5, 5.14.4, 5.18.2, and 5.16.3 (debugging, no threads) seem to be OK. Perl Info
|
From @jkeenanOn Wed Mar 23 17:25:11 2016, mauke- wrote:
Segfaults in plain vanilla 5.22.0 as well (no threads, no debugging). Same error output as above. -- |
The RT System itself - Status changed from 'new' to 'open' |
From @jkeenanOn Wed Mar 23 17:25:11 2016, mauke- wrote:
Confirmed that blead looks okay on non-threaded, non-debugging builds. ##### $ ./perl -e 'END { caller 1 } eval("sub { die }")->()'
Ditto for me (unthreaded, non-debugging)
-- |
From @iabynOn Wed, Mar 23, 2016 at 05:25:11PM -0700, l.mai@web.de wrote:
Well it bisects to this, but it's not immediately obvious to me why that commit b042e32 do PL_tmps_floor restore in POPBLOCK -- |
From @iabynOn Thu, Mar 24, 2016 at 01:04:52PM +0000, Dave Mitchell wrote:
Having now looked this in more depth, that commit fixed it by a chance commit fc6e609 dounwind(): do a POPBLOCK for final cx frame. The issue was that when code dies without being trapped by an eval, END { caller 1 } eval("sub { die }")->() the temporary anon sub was getting freed while PL_curcop still pointed Later, caller() is called and it expects PL_curcop to be non-null. -- |
@iabyn - Status changed from 'open' to 'resolved' |
Migrated from rt.perl.org#127774 (status was 'resolved')
Searchable as RT127774$
The text was updated successfully, but these errors were encountered: