What version is the OP using? I fixed a memory leak with a non-working DESTROY 
not very long ago, and I suspect the OP is using the older broken version.

Even if the OP can't upgrade to the newer version, then they can use the 
read_png() and other non-OO methods, which are well known not to have any 
memory issues.

-Judd

____________________________
Judd Taylor
Software Engineer

Orbital Systems, Ltd.
3807 Carbon Rd.
Irving, TX 75038-3415

[email protected]
(972) 915-3669 x127

________________________________________
From: David Mertens [[email protected]]
Sent: Thursday, August 02, 2012 9:02 AM
To: Sisyphus
Cc: chm; [email protected]
Subject: Re: [Perldl] Memory problems with GD

Rob - Can you reproduce the memory failure on your machine with the
OP's script (and a suitably created 9134x6059 white png)?

Afsheen - Do you still get a crash if you explicitly call $im->DESTROY
instead of undef $im?

David

On Thu, Aug 2, 2012 at 8:45 AM, Sisyphus <[email protected]> wrote:
>
> ----- Original Message ----- From: "David Mertens"
> <[email protected]>
> To: "chm" <[email protected]>
> Cc: <[email protected]>
> Sent: Thursday, August 02, 2012 11:17 PM
> Subject: Re: [Perldl] Memory problems with GD
>
>
>
>> Hmm, this may be an issue with how PDL::IO::GD is implemented. I don't
>> have GD, but if you could try the following code, which is a minor
>> modification of your script, we might get somewhere:
>>
>> __CODE__
>> use strict;
>> use PDL;
>> use PDL::IO::Pic;
>> use PDL::IO::GD;
>>
>> package My::PDL::IO::GD;
>>
>> our @ISA = qw(PDL::IO::GD);
>>
>> sub DESTROY {
>>    my $self = shift;
>>    print "Destroying the image\n";
>>    $self->SUPER::DESTROY();
>> }
>>
>> package main;
>>
>> $|++;
>>
>>
>> for my $i (0 .. 500)
>> {
>>    print "$i\n";
>>    test();
>>
>> }
>>
>> sub test
>> {
>>    my $path = 'largeimage.png';
>>    my $im = My::PDL::IO::GD->new( {filename => $path} );
>>    undef $im;
>>
>> }
>> __END__
>>
>> My hunch is that undef'ing $im doesn't actually lead to the
>> destruction. If it *does* work, then you should have output that looks
>> like this:
>> 0
>> Destroying the image
>> 1
>> Destroying the image
>> ...
>>
>> in which case I have *no* *idea* what's going on. However, if you
>> don't get those notifications, we have a circular reference issue
>> somewhere that needs to be fixed, which is a tractable problem. :-)
>
>
> For me, the undef() in your test script *does* call DESTROY. I get
>
>
> 0
> Destroying the image
> 1
> Destroying the image
> ...
>
> Also, in the general case, I'm finding that undef() of an object *does* call
> for its DESTROY().
> Still ... it'll be interesting to see if the op is finding the same.
>
> I suppose it's also possible that we have a bodgey DESTROY() - one that's
> not freeing up memory correctly. (I haven't looked.)
>
> Cheers,
> Rob



--
 "Debugging is twice as hard as writing the code in the first place.
  Therefore, if you write the code as cleverly as possible, you are,
  by definition, not smart enough to debug it." -- Brian Kernighan

_______________________________________________
Perldl mailing list
[email protected]
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl

_______________________________________________
Perldl mailing list
[email protected]
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl

Reply via email to