On Fri, 07 Sep 2001 18:06:17 +0200, "Arthur Bergman" wrote:
>> On Fri, Sep 07, 2001 at 12:27:58AM -0700, Alex Krohn wrote:
>> > while (1) {
>> > {
>> > my $var = 'x' x 500000;
>> > my $sub = sub { my $sub2 = sub { $var; } };
>> > }
>> > # $var and $sub should be gone, but memory is never freed
>> > sleep 1; # Don't crash things =)
>> > }
>> >
>> > will grow forever
>>
>> > it does not grow, definately something strange going on. Happens on
>> > perl 5.004_04, 5.005_03 and 5.6.1.
>>
>> confirmed in bleadperl (patch 11936). CCing p5p.
>>
>> atleast one sub { sub{} } leak was fixed recently, but not this one.
>>
>> - Barrie
>
>Seems like we are not properly freeing the prototype CV which is cloned.
Not likely, since there are always a fixed number of closure prototypes
when there is no eval"" to create new ones.
It is more likely that the reference loop between the inner and outer
CVs is preventing the freeing of either of them. I'm not in fact sure
that the reference loop *can* be eliminated trivially, given these two
CVs can have different lifetimes. Perhaps the right solution is to
move to using weakrefs for CvOUTSIDE(), I dunno.
Sarathy
[EMAIL PROTECTED]