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
