トップ «前の日記(2004-09-15 (Wed)) 最新 次の日記(2004-09-19 (Sun))» 編集   RSS 1.0 FEED  

Journal InTime


2004-09-18 (Sat) [長年日記]

_ search-namazuとENV

mod_rubyを使わなくても、以下のスクリプトで落ちることを確認。

require "search/namazu"

VAL = "x" * 100
(1..100).each do |i|
  p i
  ("A00".."A99").each do |name|
    ENV[name] = VAL
  end
  result = Search::Namazu.search("ruby", ["/home/shugo/tmp/index"])
  10000.times {
    Object.new
  }
  ENV.clear
end

ちょっと条件を変えるとささったりする。

どうもlibnmzのnmz_set_lang()でsetenv()を使っているのが原因のようだ。 RubyのENVの実装って、拡張ライブラリなどでsetenv()を使わないことを 前提にしていたような気がする。

試しに以下のようにnmz_set_lang()をruby_setenv()で置き換えると 落ちなくなるようだ。

 
--- namazu.c.orig     2004-09-19 01:21:14.000000000 +0900
+++ namazu.c  2004-09-19 01:35:42.000000000 +0900
@@ -301,7 +301,7 @@ static void process_lang(VALUE lang)

        if(!NIL_P(lang))
                slang = StringValuePtr(lang);
-     nmz_set_lang(slang);
+     ruby_setenv("LANG", slang);
 }

 static VALUE process_fields(VALUE fields)

うーん、どうしたもんだか。

Tags: Ruby mod_ruby