北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

メモリリーク調査用のメモ

こことかこことか拾い読み。やべー、うちのフィルタも絶対リークしてますよ。

なんとかしなきゃいけないので、完全にエントリの内容パクって準備。以下、自分メモです。

  • sudo cpan -i Devel::Leak::Object
  • sudo cpan -i Devel::Cycle
  • sudo cpan -i PadWalker を忘れずに!


追記。カッとなってパッチ作っちゃいました。ストレスが溜まってたのかもしれません。

--- lib/Template/Plugin/Filter.pm.org	2007-04-28 02:56:05.000000000 +0900
+++ lib/Template/Plugin/Filter.pm	2007-12-08 11:20:41.000000000 +0900
@@ -27,6 +27,8 @@
 use warnings;
 use base 'Template::Plugin';
 
+use Scalar::Util qw/weaken/;
+
 our $VERSION = 1.36;
 our $DYNAMIC = 0 unless defined $DYNAMIC;
 
@@ -63,6 +65,7 @@
 
 sub factory {
     my $self = shift;
+    weaken(my $weaken_self = $self);
 
     if ($self->{ _DYNAMIC }) {
 	return $self->{ _DYNAMIC_FILTER } ||= [ sub {
@@ -70,13 +73,13 @@
 	    my $config = ref $args[-1] eq 'HASH' ? pop(@args) : { };
 	
 	    return sub {
-		$self->filter(shift, \@args, $config);
+		$weaken_self->filter(shift, \@args, $config);
 	    };
 	}, 1 ];
     }
     else {
 	return $self->{ _STATIC_FILTER } ||= sub {
-	    $self->filter(shift);
+	    $weaken_self->filter(shift);
 	};
     }
 }