Perl 5.10.0 正規表現でメモリリーク発生

Perl 5.10.0 には正規表現周りでメモリリークが発生するとのこと。
regcomp.c の修正で解決済み らしいが、Linux ディストリビューションで
既に巷に出回っている 5.10.0 は当面は、現役続行になりそうなので、
サーバでデーモン的に常時起動している場合は、問題になりそう?
 
ちょうど XML::TreePP モジュールで、『Perl 5.8 では問題がないのに、
Perl 5.10 だとメモリリークが発生する』との問い合わせが来たので
確認していたところ。
while ( 1 ) {
        qr/something/;
}
これだけのコードでメモリリークを確認できます。
5.8.8 では使用メモリは 5MB くらいなのに、5.10.0 ではガシガシ増える。
コードゴルフ的には、ワンライナーでも確認できたり。
$ perl -e 'qr// while 1'
XML::TreePP で使っていた正規表現は、前方一致検索だけのシンプルな
コードだったので、substr() を使って正規表現の利用を回避して対応。
 
正規表現をいったん使うと、そのメモリが開放されないのかな?
Perl なのに正規表現で問題発生とは、ちょっと困りますね。
正規表現がどうしても必要なプログラムって多いと思いますが、
5.10.0 では使えないということになってしまうのでしょうか?
Perl 5.8.0 も鬼門だったが、5.10.0 もやっぱり避けたほうが良い!?
 
PS)
XML::TreePP への問い合わせをもらったのは7月8日だったのですが、
確認する時間がなくて放置してしまっていました、ゴメンナサイ!

"Perl 5.10.0 正規表現でメモリリーク発生" へのコメントを書く

お名前
メールアドレス
ホームページアドレス
コメント