I have uploaded MooseX::LeakCheck to cpan.
https://github.com/exodist/MooseX-LeakCheck

-Chad

On Mon, Jan 2, 2012 at 5:38 AM, Stevan Little
<stevan.lit...@iinteractive.com> wrote:
> 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