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

Mike Small <[email protected]>
Newsgroups gmane.comp.lang.perl.perl-mongers.boston
Message-ID <[email protected]>
Do I understand correctly that you don't want to call $orig_destroy in
your version to avoid the leak (from it looking at $^V) but also don't
want to look at $^V yourself, which you might condition off of to decide
whether $orig_destroy should run, in case that leaks?  Can you use the
old version variable $] instead or would that also leak?

Duane Bronson <[email protected]> writes:

> 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
>
>
>
>
>
> _______________________________________________
> Boston-pm mailing list
> [email protected]
> http://mail.pm.org/mailman/listinfo/boston-pm
>

-- 
Mike Small
[email protected]
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.