Hatena::ブログ(Diary)

北海道苫小牧市出身のPGが書くブログ RSSフィード Twitter

Fork me on GitHub

2010-10-11(月)

Template-Toolkit-2.22のメモリリーク【再】

以前Template::Plugin::Filterのリークを直すパッチを書いて2.19_02で採用されていたのですが、不具合があってrevertされてしまってました*1

2.22でリークするってのはこんなスクリプト書けばわかります(test::simple は自分でTemplate::Plugin::Filterを継承して作って)。

for my $l (1 .. 1000) {
    my $tpl = Template->new(
        PLUGIN_BASE  => 'test',
    );
    $tpl->context->plugin('simple', []);

    warn `ps -o rss= -p $$` if $l % 10 == 0;
}

ってことで、パッチを書いてリベンジ。リークがあるとどうしても MaxRequestsPerChild の値を極端に小さくしなければいけなかったりと色々困りもんなので、直って欲しいです。

もしかして: Xslate

2010-10-13 追記

ぼやいていたら @tokuhirom さんからアドバイスをもらいました。

それにしても TT 使ってる人はみんなどうしているんだろ。メモリリーク気にせず使っているのか、それとも、そもそも Filter のサブクラスなんて作ってないのかなあ。

@hiratara

filter のプラグインつくるだけなら Template::Plugin 直接つかってもいいですよね。

@tokuhirom

確かに、もともとのマツモさんのエントリでもそのような解決法をとっていました。

  1. 親クラスをTemplate::Plugin::FilterからTemplate::Pluginに
  2. initをnewに
  3. $self->install_filterを$context->define_filterに

それでもやっぱりTemplateToolkitがすき

*1:致命的な不具合なので、送ったパッチが悪かったです。

ふぁんねふぁんね 2010/10/13 10:19 突然すみません。
チャベリの裏口からこのページにたどりついたのですが、
チャベリの裏口ってどうやって作っておられるんですか?
すごいですよね。便利ですし。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hiratara/20101011/1286787124