summaryrefslogtreecommitdiff
path: root/regcomp.c
diff options
context:
space:
mode:
authorDave Mitchell <davem@fdisolutions.com>2004-10-29 21:04:17 +0000
committerDave Mitchell <davem@fdisolutions.com>2004-10-29 21:04:17 +0000
commitb34c0dd4a7081ed822e2197d6a723d2ab2fdfc86 (patch)
tree79e12d9672fac988f06daf38b445e954c784b00e /regcomp.c
parent2d8d5d5aa55d3bc73a36db1fc2d8bcfe8bb20516 (diff)
downloadperl-b34c0dd4a7081ed822e2197d6a723d2ab2fdfc86.tar.gz
[perl #31851] Threading crash with closures
various OpREFCNT_inc() operations weren't doing locking p4raw-id: //depot/perl@23433
Diffstat (limited to 'regcomp.c')
-rw-r--r--regcomp.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/regcomp.c b/regcomp.c
index 7587498efb..2bcb16e0a9 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -4983,9 +4983,14 @@ Perl_pregfree(pTHX_ struct regexp *r)
(SvTYPE(new_comppad) == SVt_PVAV) ?
new_comppad : Null(PAD *)
);
+ OP_REFCNT_LOCK;
if (!OpREFCNT_dec((OP_4tree*)r->data->data[n])) {
+ OP_REFCNT_UNLOCK;
op_free((OP_4tree*)r->data->data[n]);
}
+ else {
+ OP_REFCNT_UNLOCK;
+ }
PAD_RESTORE_LOCAL(old_comppad);
SvREFCNT_dec((SV*)new_comppad);