diff options
author | Michael G. Schwern <schwern@pobox.com> | 2001-11-24 14:56:18 -0500 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-11-25 03:00:49 +0000 |
commit | 306196c33b5ac60c7c253de83663fec31448e22d (patch) | |
tree | e2804ca5d180cd2ef8ec64f5c39257adba9093d9 | |
parent | d2fa5cc0d287cd15433ab9335a41b9d14c02edc5 (diff) | |
download | perl-306196c33b5ac60c7c253de83663fec31448e22d.tar.gz |
$$ readonly, take two
Message-ID: <20011124195618.A14614@blackrider>
p4raw-id: //depot/perl@13252
-rw-r--r-- | perl.c | 5 | ||||
-rw-r--r-- | pp_sys.c | 5 | ||||
-rwxr-xr-x | t/op/magic.t | 4 | ||||
-rw-r--r-- | util.c | 5 |
4 files changed, 15 insertions, 4 deletions
@@ -3565,8 +3565,11 @@ S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register #endif /* USE_ENVIRON_ARRAY */ } TAINT_NOT; - if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) + if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) { + SvREADONLY_off(GvSV(tmpgv)); sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid()); + SvREADONLY_on(GvSV(tmpgv)); + } } STATIC void @@ -3923,8 +3923,11 @@ PP(pp_fork) RETSETUNDEF; if (!childpid) { /*SUPPRESS 560*/ - if ((tmpgv = gv_fetchpv("$", TRUE, SVt_PV))) + if ((tmpgv = gv_fetchpv("$", TRUE, SVt_PV))) { + SvREADONLY_off(GvSV(tmpgv)); sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid()); + SvREADONLY_on(GvSV(tmpgv)); + } hv_clear(PL_pidstatus); /* no kids, so don't wait for 'em */ } PUSHi(childpid); diff --git a/t/op/magic.t b/t/op/magic.t index 4e47414ae0..4f386231fc 100755 --- a/t/op/magic.t +++ b/t/op/magic.t @@ -36,7 +36,7 @@ sub skip { return 1; } -print "1..43\n"; +print "1..44\n"; $Is_MSWin32 = $^O eq 'MSWin32'; $Is_NetWare = $^O eq 'NetWare'; @@ -143,6 +143,8 @@ eval { die "foo\n" }; ok $@ eq "foo\n", $@; ok $$ > 0, $$; +eval { $$++ }; +ok $@ =~ /^Modification of a read-only value attempted/; # $^X and $0 { @@ -2057,8 +2057,11 @@ Perl_my_popen(pTHX_ char *cmd, char *mode) } #endif /* defined OS2 */ /*SUPPRESS 560*/ - if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) + if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) { + SvREADONLY_off(GvSV(tmpgv)); sv_setiv(GvSV(tmpgv), PerlProc_getpid()); + SvREADONLY_on(GvSV(tmpgv)); + } PL_forkprocess = 0; hv_clear(PL_pidstatus); /* we have no children */ return Nullfp; |