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 >