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.