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