Change 28065 by [EMAIL PROTECTED] on 2006/05/02 17:00:56

        Assert that SvMAGIC() isn't being called on PVMGs which are using the
        same union to store the stash for our.

Affected files ...

... //depot/perl/sv.c#1265 edit
... //depot/perl/sv.h#275 edit

Differences ...

==== //depot/perl/sv.c#1265 (text) ====
Index: perl/sv.c
--- perl/sv.c#1264~28060~       2006-05-02 05:41:43.000000000 -0700
+++ perl/sv.c   2006-05-02 10:00:56.000000000 -0700
@@ -5077,10 +5077,8 @@
        }
     }
     if (type >= SVt_PVMG) {
-       HV *ourstash;
-       if ((type == SVt_PVMG || type == SVt_PVGV) &&
-           (ourstash = OURSTASH(sv))) {
-           SvREFCNT_dec(ourstash);
+       if ((type == SVt_PVMG || type == SVt_PVGV) && SvPAD_OUR(sv)) {
+           SvREFCNT_dec(OURSTASH(sv));
        } else if (SvMAGIC(sv))
            mg_free(sv);
        if (type == SVt_PVMG && SvPAD_TYPED(sv))
@@ -10042,8 +10040,8 @@
               FIXME - instrument and check that assumption  */
            if (sv_type >= SVt_PVMG) {
                HV *ourstash;
-               if ((sv_type == SVt_PVMG) && (ourstash = OURSTASH(dstr))) {
-                   OURSTASH_set(dstr, hv_dup_inc(ourstash, param));
+               if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
+                   OURSTASH_set(dstr, hv_dup_inc(OURSTASH(dstr), param));
                } else if (SvMAGIC(dstr))
                    SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
                if (SvSTASH(dstr))

==== //depot/perl/sv.h#275 (text) ====
Index: perl/sv.h
--- perl/sv.h#274~28021~        2006-04-30 03:58:11.000000000 -0700
+++ perl/sv.h   2006-05-02 10:00:56.000000000 -0700
@@ -1164,6 +1164,8 @@
 #    define SvMAGIC(sv)                                                        
\
        (*({ SV *const _svi = (SV *) sv;                                \
            assert(SvTYPE(_svi) >= SVt_PVMG);                           \
+           if(SvTYPE(_svi) == SVt_PVMG)                                \
+               assert(!SvPAD_OUR(_svi));                               \
            &(((XPVMG*) SvANY(_svi))->xmg_u.xmg_magic);                 \
          }))
 #    define SvSTASH(sv)                                                        
\
End of Patch.

Reply via email to