This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
ensure shmread() calls get and set magic once
authorChip Salzenberg <chip@pobox.com>
Wed, 11 Jul 2012 06:19:02 +0000 (23:19 -0700)
committerChip Salzenberg <chip@pobox.com>
Wed, 11 Jul 2012 06:19:02 +0000 (23:19 -0700)
doio.c
t/io/shm.t

diff --git a/doio.c b/doio.c
index 5682426..fd6683d 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -2283,9 +2283,10 @@ Perl_do_shmio(pTHX_ I32 optype, SV **mark, SV **sp)
     if (optype == OP_SHMREAD) {
        char *mbuf;
        /* suppress warning when reading into undef var (tchrist 3/Mar/00) */
+       SvGETMAGIC(mstr);
+       SvUPGRADE(mstr, SVt_PV);
        if (! SvOK(mstr))
            sv_setpvs(mstr, "");
-       SvUPGRADE(mstr, SVt_PV);
        SvPOK_only(mstr);
        mbuf = SvGROW(mstr, (STRLEN)msize+1);
 
index 0ba566b..4a8941e 100644 (file)
@@ -55,7 +55,7 @@ if (not defined $key) {
   }
 }
 else {
-       plan(tests => 13);
+       plan(tests => 15);
        pass('acquired shared mem');
 }
 
@@ -80,3 +80,13 @@ shmwrite $key, $int, 0, 1;
 shmread $key, $number, 0, 1;
 is("$number", $int, qq{"\$id" eq "$int"});
 cmp_ok($number + 0, '==', $int, "\$id + 0 == $int");
+
+my ($fetch, $store) = (0, 0);
+{ package Counted;
+  sub TIESCALAR { bless [undef] }
+  sub FETCH     { ++$fetch; $_[0][0] }
+  sub STORE     { ++$store; $_[0][0] = $_[1] } }
+tie $ct, 'Counted';
+shmread $key, $ct, 0, 1;
+is($fetch, 1, "shmread FETCH once");
+is($store, 1, "shmread STORE once");