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

Reply via email to