From: Hidetoshi NAGAI Date: 2003-11-17T17:12:32+09:00 Subject: [ruby-dev:21931] Re: pthread trouble on tcltklib 永井@知能.九工大です. From: nobu.nakada@nifty.ne.jp Subject: [ruby-dev:21930] Re: pthread trouble on tcltklib Date: Mon, 17 Nov 2003 14:23:54 +0900 Message-ID: <200311170523.hAH5NrDp032507@sharui.nakada.kanuma.tochigi.jp> > > static 変数はゼロ初期化が保証されているはず… 変数初期化は習慣づけるようにしてるので,無いと気持ち悪くて.(^_^; > 逆に、どこでも0でOKなのかどうかが。 ruby_init() で initialized = 1 としているところを pthread_mutex_lock して,そこで ruby_thid = NATIVETHREAD_CURRENT() とするようでないと いけないでしょうか. > > > ところで Tietew さんの patch では,rb_nativethread_check で > > > ruby の native thread 以外から rb_thread_schedule() や rb_gc() が > > > 呼ばれた時点で rb_bug で落ちるようになってますよね. > > > これ,もう少し救ってあげれないかと考えていたのですが > > > > rb_gc() と rb_thread_schedule() に入れたのは単に「頻繁に呼ばれそ > > うだから」という理由であって,そこ以外なら安全というわけじゃない > > ので,[Bug] 扱いにしています。あのチェックは十分じゃありません。 > > 別native threadで呼ばれてしまった時点で、すでに手遅れといってい > いと思います。 > > At Fri, 14 Nov 2003 11:53:12 +0900, > Hidetoshi NAGAI wrote: > > ( 例えば,rb_gc なりを呼び出しを pending してその native thread を > > wait させ,ruby の native thread で rb_gc なりが終了した時点で > > 起こして return する等 ),GC 中に別の native thread でオブジェクトを > > いじってしまう危険がある (ですよね?) 点が消えずに残るということで > > あきらめました. > > どちらも、せいぜい可能なのは即座にreturnくらいでしょう。 freelist がなくなって rb_gc() が呼ばれた場合は return されても 困りますから,何も対処しないなら rb_gc() は return よりも rb_bug が適切かと思います. ところで,RUBY_CRITICAL や TRAP_BEG/TRAP_END では pthread_mutex_lock するというのは無意味 (「たいした効果はない」を含む ) でしょうか? > At Mon, 17 Nov 2003 12:49:06 +0900, > Hidetoshi NAGAI wrote: > > > configure.in では相変わらず --with-pthread-ext が付与されたときだけ > > > HAVE_LIBPTHREAD のチェックをする (FreeBSD を除く) ようになってますが, > > > このチェックはデフォルトで行っても問題はないようにも見えます. > > についてはどうしましょう? > > pthread を持つ環境では標準で NATIVETHREAD_CHECK を有効にするというのは > > まだ危険でしょうか. > > むしろ必須のような気がします。 では configure オプションなしに pthread ライブラリを持つかは調べて, 持ってるなら HAVE_LIBPTHREAD を定義するというのでいいですかね. -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp