Change 24732 by [EMAIL PROTECTED] on 2005/06/07 14:57:35

        Ensure string table counts are balanced. (Was not true in op/pack.t)

Affected files ...

... //depot/perl/sv.c#873 edit
... //depot/perl/sv.h#196 edit

Differences ...

==== //depot/perl/sv.c#873 (text) ====
Index: perl/sv.c
--- perl/sv.c#872~24728~        Tue Jun  7 06:15:45 2005
+++ perl/sv.c   Tue Jun  7 07:57:35 2005
@@ -4447,7 +4447,13 @@
        (void)SvPOK_only(dstr);
 
        if (
-            (sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
+           /* We're not already COW  */
+            ((sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
+#ifndef PERL_COPY_ON_WRITE
+            /* or we are, but dstr isn't a suitable target.  */
+            || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
+#endif
+            )
             &&
             !(isSwipe =
                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
@@ -4513,9 +4519,9 @@
                 /* making another shared SV.  */
                 STRLEN cur = SvCUR(sstr);
                 STRLEN len = SvLEN(sstr);
-               assert (SvTYPE(dstr) >= SVt_PVIV);
 #ifdef PERL_COPY_ON_WRITE
                 if (len) {
+                   assert (SvTYPE(dstr) >= SVt_PVIV);
                     /* SvIsCOW_normal */
                     /* splice us in between source and next-after-source.  */
                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
@@ -4528,6 +4534,8 @@
                     UV hash = SvSHARED_HASH(sstr);
                     DEBUG_C(PerlIO_printf(Perl_debug_log,
                                           "Copy on write: Sharing hash\n"));
+
+                   assert (SvTYPE(dstr) >= SVt_PVIV);
                     SvPV_set(dstr,
                              sharepvn(SvPVX_const(sstr),
                                       (sflags & SVf_UTF8?-cur:cur), hash));

==== //depot/perl/sv.h#196 (text) ====
Index: perl/sv.h
--- perl/sv.h#195~24721~        Tue Jun  7 05:00:09 2005
+++ perl/sv.h   Tue Jun  7 07:57:35 2005
@@ -1351,15 +1351,14 @@
 #  define SvRELEASE_IVX(sv)   ((void)((SvFLAGS(sv) & 
(SVf_OOK|SVf_READONLY|SVf_FAKE)) \
                                && Perl_sv_release_IVX(aTHX_ sv)))
 #  define SvIsCOW_normal(sv)   (SvIsCOW(sv) && SvLEN(sv))
+#else
+#  define SvRELEASE_IVX(sv)   SvOOK_off(sv)
+#endif /* PERL_COPY_ON_WRITE */
 
 #define CAN_COW_MASK   (SVs_OBJECT|SVs_GMG|SVs_SMG|SVs_RMG|SVf_IOK|SVf_NOK| \
                         SVf_POK|SVf_ROK|SVp_IOK|SVp_NOK|SVp_POK|SVf_FAKE| \
                         SVf_OOK|SVf_BREAK|SVf_READONLY|SVf_AMAGIC)
 #define CAN_COW_FLAGS  (SVp_POK|SVf_POK)
-
-#else
-#  define SvRELEASE_IVX(sv)   SvOOK_off(sv)
-#endif /* PERL_COPY_ON_WRITE */
 
 #define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) \
                                    sv_force_normal_flags(sv, 0)
End of Patch.

Reply via email to