Change 11568 by jhi@alpha on 2001/08/04 14:08:19

        Subject: [patch] refcount re ops
        From: Doug MacEachern <[EMAIL PROTECTED]>
        Date: Fri, 3 Aug 2001 18:17:41 -0700 (PDT)
        Message-ID: <[EMAIL PROTECTED]>

Affected files ...

... //depot/perl/regcomp.c#221 edit
... //depot/perl/sv.c#451 edit

Differences ...

==== //depot/perl/regcomp.c#221 (text) ====
Index: perl/regcomp.c
--- perl/regcomp.c.~1~  Sat Aug  4 08:15:05 2001
+++ perl/regcomp.c      Sat Aug  4 08:15:05 2001
@@ -2138,6 +2138,9 @@
                    ENTER;
                    Perl_save_re_context(aTHX);
                    rop = sv_compile_2op(sv, &sop, "re", &av);
+                   sop->op_private |= OPpREFCOUNTED;
+                   /* re_dup will OpREFCNT_inc */
+                   OpREFCNT_set(sop, 1);
                    LEAVE;
 
                    n = add_data(pRExC_state, 3, "nop");
@@ -4609,7 +4612,11 @@
                }
                else
                    PL_curpad = NULL;
-               op_free((OP_4tree*)r->data->data[n]);
+
+               if (!OpREFCNT_dec((OP_4tree*)r->data->data[n])) {
+                    op_free((OP_4tree*)r->data->data[n]);
+               }
+
                PL_comppad = old_comppad;
                PL_curpad = old_curpad;
                SvREFCNT_dec((SV*)new_comppad);

==== //depot/perl/sv.c#451 (text) ====
Index: perl/sv.c
--- perl/sv.c.~1~       Sat Aug  4 08:15:05 2001
+++ perl/sv.c   Sat Aug  4 08:15:05 2001
@@ -8403,6 +8403,9 @@
                ret->regstclass = (regnode*)d->data[i];
                break;
            case 'o':
+               /* XXX: can this really be shared? */
+               d->data[i] = (void*)OpREFCNT_inc((OP*)r->data->data[i]);
+               break;
            case 'n':
                d->data[i] = r->data->data[i];
                break;
End of Patch.

Reply via email to