Re: [Boston.pm] perl 5.10 memory leak?

Duane Bronson <[email protected]>
Newsgroups gmane.comp.lang.perl.perl-mongers.boston
Message-ID <[email protected]>
By the time we update to a new version of Perl, I will not likely remember this kludge, so I'm hoping to future-proof it.

Calling $orig_destroy will still run "unless ($^V ...)" and thus leak memory, so I can't future-proof that way.  Now, if I can add a destructor to the class 'version', maybe I can future proof that way, although I've tried that and failed.  I think it might be a bug in the comparison logic (overloading?), but I can't find that code.  Is that built into perl?

Duane

> On Dec 13, 2016, at 4:30 PM, Ben Tilly <[email protected]> wrote:
> 
> Module upgrades may not be likely, but I was responding to the first question which was:
> 
> "...I suspect there are better methods that won't break with a future version of IO::All."
> 
> On Tue, Dec 13, 2016 at 1:26 PM, Conor Walsh <[email protected] <mailto:[email protected]>> wrote:
> On Tue, Dec 13, 2016 at 4:20 PM, Ben Tilly <[email protected] <mailto:[email protected]>> wrote:
> > The reason to call the original DESTROY is so that if a future version of
> > IO::All adds logic to the DESTROY, you will still run that new code.
> 
> This is an excellent point, but it does not sound like surprise module
> upgrades are a likely problem in Duane's world.
> 


> On Dec 13, 2016, at 4:20 PM, Ben Tilly <[email protected]> wrote:
> 
> The reason to call the original DESTROY is so that if a future version of IO::All adds logic to the DESTROY, you will still run that new code.  While still running the code that you know you need to run.
> 
> In fact I would suggest the following instead:
> 
> use IO::All;
> {
>   no warnings 'redefine';
>   my $orig_destroy = *IO::All::DESTROY{CODE};
>   sub IO::All::DESTROY {
>     my $self = shift;
>     no warnings;
>     untie *$self if tied *$self;
>     $orig_destroy->($self, @_) if $orig_destroy;
>   }
> }
> 
> Now the custom code that you run is limited to what you are afraid that their DESTROY gets wrong.
> 
> (Note that my original version had a bug.  I said IO::ALL::DESTROY when it needed to be IO::All::DESTROY.)




Duane Bronson
[email protected] <mailto:[email protected]>
http://www.nerdlogic.com/ <http://www.nerdlogic.com/>
5 Goden St.
Belmont, MA 02478
617.515.2909
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.