From: Nobuyoshi Nakada Date: 2008-01-24T13:05:43+09:00 Subject: [ruby-dev:33343] Re: can modify array during iteration なかだです。 At Thu, 24 Jan 2008 00:03:24 +0900, Yusuke ENDOH wrote in [ruby-dev:33328]: > これを修正するためには、ARY_ITERLOCK がロックされている回数を保存し、 > それが 0 になったときだけ書き換えを認めるようにしないといけないと思い > ます。 > 関連して、以下のようにすると落ちます。Array#map! が、イテレート中に > 書き換えられないことを前提にしていることが原因です。 ARY_ITERLOCKはarray.c以外では見えませんが、collect_bang_i()以外 はrb_ary_store()を使っているので、逆にARY_ITERLOCKはいらないので はないかという気がします。 同じくARY_SORTLOCKも、変更するときとsort中にブロックから返った後 の両方でチェックしていますが、これも後者のary_sort_check()だけで 充分ではなかろうかと。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦