summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael G. Schwern <schwern@pobox.com>2001-11-24 14:56:18 -0500
committerJarkko Hietaniemi <jhi@iki.fi>2001-11-25 03:00:49 +0000
commit306196c33b5ac60c7c253de83663fec31448e22d (patch)
treee2804ca5d180cd2ef8ec64f5c39257adba9093d9
parentd2fa5cc0d287cd15433ab9335a41b9d14c02edc5 (diff)
downloadperl-306196c33b5ac60c7c253de83663fec31448e22d.tar.gz
$$ readonly, take two
Message-ID: <20011124195618.A14614@blackrider> p4raw-id: //depot/perl@13252
-rw-r--r--perl.c5
-rw-r--r--pp_sys.c5
-rwxr-xr-xt/op/magic.t4
-rw-r--r--util.c5
4 files changed, 15 insertions, 4 deletions
diff --git a/perl.c b/perl.c
index 14fda3533f..9d493adae9 100644
--- a/perl.c
+++ b/perl.c
@@ -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
diff --git a/pp_sys.c b/pp_sys.c
index bf2b3522e0..4b9b0963d7 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -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
{
diff --git a/util.c b/util.c
index 4f3e0923f5..01238b865d 100644
--- a/util.c
+++ b/util.c
@@ -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;