*@chm* I ran my code again with "undef $im;" and the code failed at the same point. When I replaced that line with "$im->Destroy;", the code successfully runs through all 500 iterations.
*@David Mertens* When I run your code, I get the same error as before. Thanks for your help so far, Perldough 2012/8/2 David Mertens <[email protected]> > 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
