plperl_local_sig.patch
text/x-patch
Filename: plperl_local_sig.patch
Type: text/x-patch
Part: 0
*** a/src/pl/plperl/expected/plperl.out
--- b/src/pl/plperl/expected/plperl.out
***************
*** 639,641 **** CONTEXT: PL/Perl anonymous code block
--- 639,643 ----
DO $do$ use warnings FATAL => qw(void) ; my @y; my $x = sort @y; 1; $do$ LANGUAGE plperl;
ERROR: Useless use of sort in scalar context at line 1.
CONTEXT: PL/Perl anonymous code block
+ DO $do$ die "$SIG{'ALARM'} set!" if($SIG{'ALARM'}); $SIG{'ALARM'} = sub { print "alarm!\n"}; $do$ LANGUAGE plperl;
+ DO $do$ die "$SIG{'ALARM'} set!" if($SIG{'ALARM'}); $do$ LANGUAGE plperl;
*** a/src/pl/plperl/plperl.c
--- b/src/pl/plperl/plperl.c
***************
*** 1895,1906 **** plperl_call_perl_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo)
--- 1895,1912 ----
{
dSP;
SV *retval;
+ GV *gv;
int i;
int count;
ENTER;
SAVETMPS;
+ gv = gv_fetchpv("SIG", 0, SVt_PVHV);
+ if (!gv)
+ elog(ERROR, "couldn't fetch %%SIG");
+ save_hash(gv); /* local %SIG */
+
PUSHMARK(SP);
EXTEND(sp, desc->nargs);
***************
*** 1976,1981 **** plperl_call_perl_trigger_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo,
--- 1982,1988 ----
dSP;
SV *retval,
*TDsv;
+ GV *gv;
int i,
count;
Trigger *tg_trigger = ((TriggerData *) fcinfo->context)->tg_trigger;
***************
*** 1986,1995 **** plperl_call_perl_trigger_func(plperl_proc_desc *desc, FunctionCallInfo fcinfo,
TDsv = get_sv("_TD", 0);
if (!TDsv)
elog(ERROR, "couldn't fetch $_TD");
-
save_item(TDsv); /* local $_TD */
sv_setsv(TDsv, td);
PUSHMARK(sp);
EXTEND(sp, tg_trigger->tgnargs);
--- 1993,2006 ----
TDsv = get_sv("_TD", 0);
if (!TDsv)
elog(ERROR, "couldn't fetch $_TD");
save_item(TDsv); /* local $_TD */
sv_setsv(TDsv, td);
+ gv = gv_fetchpv("SIG", 0, SVt_PVHV);
+ if (!gv)
+ elog(ERROR, "couldn't fetch %%SIG");
+ save_hash(gv); /* local %SIG */
+
PUSHMARK(sp);
EXTEND(sp, tg_trigger->tgnargs);
*** a/src/pl/plperl/sql/plperl.sql
--- b/src/pl/plperl/sql/plperl.sql
***************
*** 415,417 **** DO $do$ use strict; my $name = "foo"; my $ref = $$name; $do$ LANGUAGE plperl;
--- 415,420 ----
-- check that we can "use warnings" (in this case to turn a warn into an error)
-- yields "ERROR: Useless use of sort in scalar context."
DO $do$ use warnings FATAL => qw(void) ; my @y; my $x = sort @y; 1; $do$ LANGUAGE plperl;
+
+ DO $do$ die "$SIG{'ALARM'} set!" if($SIG{'ALARM'}); $SIG{'ALARM'} = sub { print "alarm!\n"}; $do$ LANGUAGE plperl;
+ DO $do$ die "$SIG{'ALARM'} set!" if($SIG{'ALARM'}); $do$ LANGUAGE plperl;