Re: Suggestion: Memory Leak detection assistance

[email protected] (Stevan Little)
Newsgroups perl.moose
Message-ID <[email protected]>
This would make an excellent MooseX:: module.

- Stevan

On Jan 2, 2012, at 2:48 AM, Chad Granum wrote:

> I suggest an attribute property called 'leak_check' that when set does
> the following at destruction:
> 
> * Weaken the reference stored in the attribute
> * Return if the ref is undef'd because the object has no strong ref's
> * Take action (warn/die/custom) if the ref remains (there is a
> hardref somewhere)
> 
> This attribute property would be very useful when you define an
> attribute that you know should be the only remaining ref to an object
> when your instance is destroyed.
> 
> Example usage:
> 
> has something => (
>    isa => 'Something::Temporary',
>    is   => 'ro',
>    leak_check => sub { # Could also use 'fatal' or 'warn'
>        my ( $self, $attr_name, $ref ) = @_;
>        ...
>    },
>    default => sub { Something::Temporary->new() },
> );
> 
> I just finished debugging an issue that was caused by an object ref
> being held in a location where it should have been undef'd. The issue
> was in an object that serializes its changes to disk on destruction.
> This object was stored in an object implemented with Moose. If Moose
> had this capability, and I as a developer had used it on this
> attribute which I knew should cleanup with the parent, the memory leak
> warning would have saved me time.
> 
> For now, to prevent this issue in the future I have manually added
> logic to validate some attributes go away on cleanup. But I think this
> would be a valuable tool for developers to activate when they know
> what they are doing, and have an attribute that should be cleaned with
> the parent.
> 
> Thank you,
> 
> Chad Granum
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.