----- 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

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

Reply via email to