前のエントリで調査した結果、Text::MeCab に深刻なメモリーリークが発見されました。

メモリを解放する処理自体は問題なく呼ばれていたのですが、そのタイミングがperlプロセスが終了する時点まで待たされている状態でした。最終的には確実に解放されていたのでなかなか気づかなかったのですが、node->nextやnode->prevのような関数を呼ぶとperlが終了するまでメモリが解放されませんでした。特に形態素解析する文章が巨大な場合、これは一瞬でメモリリークとなり、問題が顕在化します。

先ほどアップロードした0.20005でこの不具合を修正してありますので、CPAN登録が済み次第アップグレードを推奨いたします。急いでいる場合はcodereposからも入手できます。

ちなみに最終的なフィックスの決め手はXML::LibXMLのソースコードを読んだ事でした。自分は愚直にsv_blessという関数を使ってオブジェクトを作成していたのですが、XML::LibXMLではsv_setref_pvという関数で同等の事をしていました。とりあえずperlgutsを読み、このsv_setref_pvを使用したところ一瞬で問題が解決した次第です。matts++, pajas++