From: matz@... (Yukihiro Matsumoto) Date: 2003-11-14T05:11:16+09:00 Subject: [ruby-dev:21921] Re: core dump in rb_hash_aset まつもと ゆきひろです In message "[ruby-dev:21899] core dump in rb_hash_aset" on 03/11/12, Tanaka Akira writes: | |% ruby -e 'h = {} |Thread.new { loop { h.delete_if {|k, s| s.length == 0 } } } |loop { h[rand] = "" } |' |-e:3: [BUG] Segmentation fault |ruby 1.8.1 (2003-11-11) [i686-linux] | |zsh: abort (core dumped) ruby -e | |というように core を吐くことがあります。 | |ただ、(すぐには)吐かないこともありますが、起動しては ^C で止めるという |のを何回かに一回は core を吐きます。 飛行機の中でdelete_if実行中には更新を許さないようにしてみま したが、まだ落ちます。更新中にdelete_ifが実行されちゃうケー スでst_lookupがまだ参照しているrecordをfree()しちゃうようで す。もうちょっと考えないといけませんね。 すぐに思いつくのはdelete_ifでは条件が真のkeyを覚えておくだけ にして、削除は後で一度にするくらいですかねえ。