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