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)
うーん、どうしたもんだか。