From  owner-perl5-porters@nicoh.com  Tue Mar 14 23:57:32 1995 
Return-Path: <owner-perl5-porters@nicoh.com> 
Message-Id: <9503142325.AA28349@scalpel> 
To: cwitty@ai.mit.edu (Carl Witty) 
Cc: perl5-porters@africa.nicoh.com 
Subject: Re: memory leaks in closures 
In-Reply-To: Your message of "Mon, 13 Mar 95 20:46:08 EST." 
    <9503140146.AA01674@battle-creek>
Date: Tue, 14 Mar 95 15:25:31 -0800 
From: lwall@scalpel.netlabs.com (Larry Wall)
Sender: owner-perl5-porters@nicoh.com 
List-Name: perl5-porters 
Precedence: bulk 
P-From: Larry Wall <lwall@scalpel.netlabs.com> 

Okay, here's your official unofficial closure leak patch.

*** op.c	Mon Mar 13 15:03:34 1995
--- work/op.c	Tue Mar 14 15:03:36 1995
***************
*** 2683,2689 ****
      comppadlist = newAV();
      AvREAL_off(comppadlist);
      av_store(comppadlist, 0, SvREFCNT_inc((SV*)protopad_name));
!     av_store(comppadlist, 1, SvREFCNT_inc((SV*)comppad));
      CvPADLIST(cv) = comppadlist;
      av_extend(comppad, AvFILL(protopad));
      curpad = AvARRAY(comppad);
--- 2683,2689 ----
      comppadlist = newAV();
      AvREAL_off(comppadlist);
      av_store(comppadlist, 0, SvREFCNT_inc((SV*)protopad_name));
!     av_store(comppadlist, 1, (SV*)comppad);
      CvPADLIST(cv) = comppadlist;
      av_extend(comppad, AvFILL(protopad));
      curpad = AvARRAY(comppad);
*** pp.c	Fri Mar 10 21:34:06 1995
--- work/pp.c	Tue Mar 14 09:38:16 1995
***************
*** 270,276 ****
      EXTEND(SP,1);
  
      if (SvFLAGS(cv) & SVpcv_CLONE) {
! 	cv = cv_clone(cv);
      }
  
      PUSHs((SV*)cv);
--- 270,276 ----
      EXTEND(SP,1);
  
      if (SvFLAGS(cv) & SVpcv_CLONE) {
! 	cv = (CV*)sv_2mortal((SV*)cv_clone(cv));
      }
  
      PUSHs((SV*)cv);

Larry
