まつもと ゆきひろです

In message "Re: [ruby-dev:35050] Re: deadlock detection for 1.9"
    on Wed, 11 Jun 2008 22:48:46 +0900, "Yusuke ENDOH" <mame / tsg.ne.jp> writes:

|2008/06/11 9:18 Yukihiro Matsumoto <matz / ruby-lang.org>:
|> |  - スレッドがロック中の mutex が GC されなくなる。
|> |    loop { Mutex.new.lock } # どんどんメモリを消費する
|>
|> これだけはいただけません。weak refなどを使ってなんとかできな
|> いものでしょうかねぇ。
|
|なんとかできました。変更点:
|
|  - rb_thread_mark で keeping_mutexes を mark しないようにした。
|
|  - mutex_mark で next_mutex を mark しないようにした。
|
|  - mutex_free で unlock するようにした。
|
|
|あと、mutex が lock 状態で放置されるのはおそらくプログラムのバグ
|なので警告した方がいいのでは、とささださんにコメントを頂きました。
|これもやってみました。
|
|$ ./ruby -e 'Thread.new { Mutex.new.lock }.join'
|warning: mutex #<Mutex:0x818e6f8> remains to be locked by terminated thread

これで私からの注文はもうありません。笹田さんがOKならコミット
してください。