From: SASADA Koichi Date: 2011-09-24T11:02:23+09:00 Subject: [ruby-dev:44537] Re: [ruby-dev:44536] Re: [ruby-dev:44535] Re: [ruby-dev:44534] Re: [ruby-dev:44532] [Ruby 1.9 - Bug #5350] WeakRef で謎の NoMethodError (2011/09/23 18:58), SASADA Koichi wrote: >  ファイナライザの実行は,何時起こるかわからないものなので,デッドロック > の可能性がある処理を行うのは,プログラムが悪い,ということになります.基 > 本的には,デッドロックを起こさないように書き直す必要がありますが,例えば > 上記の場合では,mutex.trylock を利用することで回避することができます.  すみません,trylock ではダメですね.  うーん,これはどうするべきかな.ファイナライズ処理を遅延させるように コードを書き換えれば解決できますが,ちょっと大がかりな気もしますね.問題 が weakref だけなら,大がかりでもいい気がしますが.  この問題は,pthread_mutex* で管理している状況をシグナルハンドラでどう 処理するか,みたいなのに似ていると思うのですが,そもそも pthread_mutex* はシグナルセーフじゃないから使えないんだよな. -- // SASADA Koichi at atdot dot net