[groonga-dev,00243] Re: TokenMecabを指定してレコードを追加するとSEGVが発生する

Back to archive index

Kouhei Sutou kou****@clear*****
2009年 10月 20日 (火) 18:14:23 JST


須藤です。

In <20091****@epepe*****>
  "Re: [groonga-dev,00209] Re: TokenMecabを指定してレコードを追加するとSEGVが発生する" on Tue, 20 Oct 2009 02:22:29 +0900,
  morit****@razil***** wrote:

> 以前、mecabを使うとatexit()まわりで問題が出るため、
> 回避策としてrb_set_end_proc()を使用するようにしていただいたと思います。

はい、そうです。

> ところが、apache + mod_rubyを使用した場合、
> スクリプトを実行する度にrb_set_end_proc()で指定した関数が呼ばれるため、
> 同一プロセスでgrn_fin()が何度も呼ばれることになり、
> 結果として2度目にスクリプトが実行されるタイミングで、
> segvで落ちてしまうことが判明しました。

たしかにそうですね。確認しました。
むぅ。

> できればmod_rubyを使ってwebアプリケーションを書きたいのですが、
> 何か良い回避策はないでしょうか。。?

trunkに回避策を入れました!

rb_set_end_proc()ではなく、ObjectSpace.define_finalizerを使
うようにしています。Cからdefine_finalizerを使うAPIが用意され
ていないので使いたくないなぁと思っていたのですが、mod_rubyだ
と問題があることがわかったので、define_finalizerを使うように
しました。
-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)




groonga-dev メーリングリストの案内
Back to archive index