summaryrefslogtreecommitdiff
path: root/op.c
diff options
context:
space:
mode:
authorHugo van der Sanden <hv@crypt.org>1999-06-23 17:16:05 +0100
committerGurusamy Sarathy <gsar@cpan.org>1999-07-07 07:20:02 +0000
commit3eb57f739dbf88247a22d7a04da1e703d7150f00 (patch)
tree62aeaff5fedd6b16ac1757c9c8a4ba2fd4290125 /op.c
parenta27f85b3b5aa22c0f009ddabe35728717aaebf3d (diff)
downloadperl-3eb57f739dbf88247a22d7a04da1e703d7150f00.tar.gz
memleak in optimizer
Message-Id: <199906231516.QAA23851@crypt.compulink.co.uk> p4raw-id: //depot/perl@3634
Diffstat (limited to 'op.c')
-rw-r--r--op.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/op.c b/op.c
index e1d697695a..d9e78f7aba 100644
--- a/op.c
+++ b/op.c
@@ -686,10 +686,7 @@ Perl_op_free(pTHX_ OP *o)
break;
case OP_NEXTSTATE:
case OP_DBSTATE:
- Safefree(cCOPo->cop_label);
- SvREFCNT_dec(cCOPo->cop_filegv);
- if (cCOPo->cop_warnings != WARN_NONE && cCOPo->cop_warnings != WARN_ALL)
- SvREFCNT_dec(cCOPo->cop_warnings);
+ cop_free((COP*)o);
break;
case OP_CONST:
SvREFCNT_dec(cSVOPo->op_sv);
@@ -730,6 +727,15 @@ Perl_op_free(pTHX_ OP *o)
}
STATIC void
+S_cop_free(pTHX_ COP* cop)
+{
+ Safefree(cop->cop_label);
+ SvREFCNT_dec(cop->cop_filegv);
+ if (cop->cop_warnings != WARN_NONE && cop->cop_warnings != WARN_ALL)
+ SvREFCNT_dec(cop->cop_warnings);
+}
+
+STATIC void
S_null(pTHX_ OP *o)
{
if (o->op_type != OP_NULL && o->op_type != OP_THREADSV && o->op_targ > 0)
@@ -1678,7 +1684,7 @@ Perl_scope(pTHX_ OP *o)
o->op_ppaddr = PL_ppaddr[OP_SCOPE];
kid = ((LISTOP*)o)->op_first;
if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE){
- SvREFCNT_dec(((COP*)kid)->cop_filegv);
+ cop_free((COP*)kid);
null(kid);
}
}