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.