This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
RT #76248: double-freed SV with nested sig-handler
authorDavid Mitchell <davem@iabyn.com>
Mon, 1 Nov 2010 15:36:44 +0000 (15:36 +0000)
committerDavid Mitchell <davem@iabyn.com>
Mon, 1 Nov 2010 16:38:31 +0000 (16:38 +0000)
commit0c4d3b5ea916cf640ea163c5a6bcffefade55a1b
treebe11e83d70151641a17c462acac3c4e7a4f04a10
parent51698cb360d5bba06e12496ef9c7bf82e3352b71
RT #76248: double-freed SV with nested sig-handler

There was some buggy code in Perl_sighandler() related to getting an SV
with the signal name to pass to the perl-level handler function.
`
Basically:

on threaded builds, a sig handler that died leaked PL_psig_name[sig];
on unthreaded builds, in a recursive handler that died, PL_sig_sv was
prematurely freed.

PL_sig_sv was originally just a file static var that was not
recursion-save anyway, and got promoted to perlvars.h when it should
instead have been done away with. So I've got rid of it now, and
rationalised the code, which fixed the two issues listed above.

Also added an assert which makes the dodgy manual popping of the save
stack slightly less dodgy.
embed.fnc
embedvar.h
mg.c
perlapi.h
perlvars.h
proto.h