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. :-)
David
On Thu, Aug 2, 2012 at 7:06 AM, chm <[email protected]> wrote:
> On 8/1/2012 7:58 PM, Afsheen Ghorashy wrote:
>>
>> I've been having some memory issues with one of my programs so I assembled
>> this little script:
>>
>> use strict;
>> use PDL;
>> use PDL::IO::Pic;
>> use PDL::IO::GD;
>>
>> $|++;
>>
>>
>> for my $i (0 .. 500)
>> {
>> print "$i\n";
>> test();
>>
>> }
>>
>>
>> sub test
>> {
>> my $path = 'largeimage.png';
>> my $im = PDL::IO::GD->new( {filename => $path} );
>> undef $im;
>>
>> }
>>
>>
>> It yields the following output:
>>
>> 0
>> 1
>> 2
>> 3
>> 4
>> 5
>> 6
>> 7
>> 8
>> 9
>> 10
>> 11
>> 12
>> 13
>> 14
>> 15
>> 16
>> 17
>> 18
>> 19
>> 20
>> 21
>> 22
>> 23
>> 24
>> 25
>> 26
>> 27
>> 28
>> PDL::IO::GD::new(): Can't read in the input file!
>> gd-png error: cannot allocate image data
>>
>>
>> I wanted to provide the picture, but I'm at work and have no access to
>> file
>> hosting sites. I know there is a way to append image data to a perl
>> script,
>> but I haven't been able to figure it out. For you reference, the image is
>> a
>> 9134x6059 white png.
>>
>> Does anyone know what I can do to avoid this type of crash?
>
>
> Looks like you are running out of memory. I see a
> ->DESTROY method in the docs. What happens if you
> add that in your loop to clean up any memory allocated
> outside of perl?
>
> --Chris
>
>
> _______________________________________________
> Perldl mailing list
> [email protected]
> http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
--
"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