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

Reply via email to