diff options
author | Hugo van der Sanden <hv@crypt.org> | 1999-06-23 17:16:05 +0100 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1999-07-07 07:20:02 +0000 |
commit | 3eb57f739dbf88247a22d7a04da1e703d7150f00 (patch) | |
tree | 62aeaff5fedd6b16ac1757c9c8a4ba2fd4290125 /op.c | |
parent | a27f85b3b5aa22c0f009ddabe35728717aaebf3d (diff) | |
download | perl-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.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -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); } } |