Change 11567 by jhi@alpha on 2001/08/03 23:52:56

        Subject: [patch] ignore PL_curpm in PL_regex_padav cleanup
        From: Doug MacEachern <[EMAIL PROTECTED]>
        Date: Fri, 3 Aug 2001 17:37:53 -0700 (PDT)
        Message-ID: <[EMAIL PROTECTED]>

Affected files ...

... //depot/perl/perl.c#354 edit
... //depot/perl/regexec.c#176 edit

Differences ...

==== //depot/perl/perl.c#354 (text) ====
Index: perl/perl.c
--- perl/perl.c.~1~     Fri Aug  3 18:00:05 2001
+++ perl/perl.c Fri Aug  3 18:00:05 2001
@@ -477,8 +477,16 @@
         SV **ary = AvARRAY(PL_regex_padav);
 
         while (i) {
-            REGEXP *re = (REGEXP *)SvIVX(ary[--i]);
-            if (re && (re->refcnt > 0)) {
+            SV *resv = ary[--i];
+            REGEXP *re = (REGEXP *)SvIVX(resv);
+
+            if (SvFLAGS(resv) & SVf_BREAK) {
+                /* this is PL_curpm, already freed
+                 * flag is set in regexec.c:S_regtry
+                 */
+                SvFLAGS(resv) &= ~SVf_BREAK;
+            }
+            else {
                 ReREFCNT_dec(re);
             }
         }

==== //depot/perl/regexec.c#176 (text) ====
Index: perl/regexec.c
--- perl/regexec.c.~1~  Fri Aug  3 18:00:05 2001
+++ perl/regexec.c      Fri Aug  3 18:00:05 2001
@@ -1855,6 +1855,8 @@
 #ifdef USE_ITHREADS
             {
                 SV* repointer = newSViv(0);
+                /* so we know which PL_regex_padav element is PL_curpm */
+                SvFLAGS(repointer) |= SVf_BREAK;
                 av_push(PL_regex_padav,repointer);
                 PL_reg_curpm->op_pmoffset = av_len(PL_regex_padav);
                 PL_regex_pad = AvARRAY(PL_regex_padav);
End of Patch.

Reply via email to