[#11110] README.EXT.jp — Kazuhiro NISHIYAMA <zn@...>
README.EXT.jpを見てて気になったところがあったのでパッチです。
[#11115] proc{|a|}.arity — Kazuhiro NISHIYAMA <zn@...>
proc{|a|}.arity #=> -2
[#11131] Re: SIGINT on windows — Daisuke Aoki <dai@...>
青木です。
青木です。
青木です。
なかだです。
なかだです。
青木です。
なかだです。
[#11138] copy-on-write for substr — Shugo Maeda <shugo@...>
前田です。
前田です。
まつもと ゆきひろです
[#11146] /(?=a)b/ — Minero Aoki <aamine@...>
あおきです。
[#11158] [Patch] tracer.rb in 1.6.1 — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです.
[#11159] net/protocol.rb ProtocolError#initialize — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#11161] 複数 Thread で止まった — Kazuhiro NISHIYAMA <zn@...>
あるプログラムで//pのwarningが別スレッドの$!.to_sと
[#11166] cgi.rb — akira yamada / やまだあきら <akira@...>
[#11183] EPOC32 and Ruby 1.7 — WATANABE Hirofumi <eban@...>
わたなべです.
まつもと ゆきひろです
On Fri, 13 Oct 2000 00:17:14 +0900
同じ問題を短いスクリプトで再現できました。
まつもと ゆきひろです
On Sat, 14 Oct 2000 03:41:18 +0900
On Sat, 14 Oct 2000 05:17:32 +0900
まつもと ゆきひろです
On Sat, 14 Oct 2000 23:45:08 +0900
まつもと ゆきひろです
前田です。
[ruby-dev:11205]と同じスクリプトで-dをつけていると
On Sun, 15 Oct 2000 02:11:02 +0900
On Sun, 15 Oct 2000 04:24:58 +0900
[#11196] malloc trouble in thread — GOTOU YUUZOU <gotoyuzo@...>
ごとうゆうぞうです。
[#11306] Ruby I18N — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
たけ(tk)です。
長沢です。
まつもと ゆきひろです
前田です。
高橋征義です。
At Mon, 30 Oct 2000 13:15:23 +0900,
某2ちゃんねるで自分の名前を見つけてびびった高橋征義です。
まつもと ゆきひろです
たけ(tk)です。
高橋征義です。
まつもと ゆきひろです
高橋征義です。
たけ(tk)です。
まつもと ゆきひろです
たけ(tk)です。
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
たけ(tk)です。 ・・ 長文ご注意。
まつもと ゆきひろです
At Tue, 7 Nov 2000 15:46:29 +0900,
まつもと ゆきひろです
In article <E13t3dt-0002Fp-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
たけ(tk)です。
At Tue, 7 Nov 2000 19:06:27 +0900,
たけ(tk)です。
あおきです。
たけ(tk)です。
あおきです。
On Wed, 8 Nov 2000 15:41:58 +0900
あおきです。
On Fri, 10 Nov 2000 01:59:09 +0900
In article <E13t4Hq-0002GS-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E13tMYW-0002te-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
たけ(tk)です。
まつもと ゆきひろです
たけ(tk)です。
たけ(tk)です。
まつもと ゆきひろです
たけ(tk)です。
まつもと ゆきひろです
たけ(tk)です。
まつもと ゆきひろです
In article <E13tNkT-00030l-00@ev.netlab.zetabits.co.jp>,
たけ(tk)です。
たけ(tk)です。
[#11312] confused error message on Windows 2000 — Katsuyuki Komatsu <komatsu@...>
小松です。
まつもと ゆきひろです
なかだです。
[ruby-dev:11141] Re: SIGINT on windows
青木です。
nobu.nakada@nifty.ne.jp wrote:
> > Windows 95 だと ReadFile() 時の Ctrl-C の処理に限って
> > CriticalSection がらみでタイミング上のデッドロックが生じます。
> > LeaveCriticalSection() の後に Sleep(0) を入れるとちょっとは大丈夫に
> > なりますが。
> Sleep(0) でマシになるということは、デッドロックというよりは
> signal thread に CPU を食われてしまって処理が進まない、というこ
> とでしょうか。
メインスレッドで win32_call_handler() で
SetEvent(h->handshake) した後、シグナルスレッドに処理が移って
win32_main_context() の WaitForSingleObject(interrupt_done, INFINITE)
が終わって、 次の RUBY_CRITICAL() の EnterCriticalSection() で
待機中に、メインスレッドに処理が移らないでデッドロックが生じて
いるようです。SetThreadContext() により何かおかしくなってこうなる
のではないかと思いますが、原因と動作自体も不明です。
とにかく、win32_main_context() の2番目の RUBY_CRITICAL() で
頻繁にデッドロックが生じます。デバッグのために、printf とか入れると
デッドロックしないなったりします。
LeaveCriticalSection() の後に Sleep(0) というのは、かなり
パフォーマンスに影響を与えるので採用できませんし。
後、プライオリティを変化させても問題は解決しませんでした。
> > あんま長い処理を CriticalSection の機構で挟むこと
> > 自体ちょっと・・・(^^;;
> えー、だって OS 自体クリティカルなんだもん(笑)。
長く何が起こるかわからない処理の場合は Semaphore の方がまだ安全
なので。私が CriticalSection を好きでないという理由でしかない
かもしれませんが、一応腸、書いておくと、
CriticalSectionを所持していないスレッドが LeaveCriticalSection()
するとその後に、EnterCriticalSection() するとデッドロックになるとか、
CriticalSectionを所持しているスレッドが解放せずに死ぬと、
Win9x 系では CriticalSection は所持したままになるとか・・・
もう回避できない問題ありっまくり(^^)
> > 後、sleep 時(win32_sleep())に Ctrl-C すると
> > 致命的な状況になります。
> これは以前出た CPU 食いまくり状態と同じでしょうか。NT だと
> ruby -e sleep でもきちんと rescue までできるんですがねぇ。
違います。完全に OS が逝っちゃいます(^^) 詳細は不明ですが
これはデバッグできないので(^^;;;
SIGINT を trap して sleep しているときに Ctrl-C で全画面モードで
エラー表示、そのままお亡くなりになられます> Windows 95
> 最初そうしてたんですけど(めんどくさかったから)、マルチプログ
> ラミングにはロックの粒度を下げた方がパフォーマンス的にはメリッ
> トがあるのでは。と思ったけど、結局今のところ native thread とし
> ては単一なのでデメリットにしかなりませんか。
ちょっと起動が遅くなったんではないかなと思ったものでして。
致命的な状況を回避するためならいいんですが、trap を使用している
とき(デフォルトの signal の処理にすぐ exit() する場合以外)だけ、
EnterCriticalSection() というのでもいいと思います。
> 考えてみたら #ifdef NT で Windows 95 まで括り込もうというのが
> 根本的に間違ってるような気もして来ました。
> #if defined(NT)
> #elif defined(WIN95)
> #endif
> という形にならなきゃおかしいのかも、そもそも。
#if ではなくて、
if(IsWin95()){ or if(IsWinNT()){
} else {
}
という感じがいいのではないでしょうか。NT の方で落ち着いたら
この点について私が作業しますという感じで(ここまで踏み込んだので
しなければいけないかなということで(;_;)。その場合、一応、私が
作業するのに一週間ぐらい掛かると見込んでください。ただ、sleep 時の
問題が私に解決できるのかは自身がありません(^^;;
> 多くの unixen ではソースレベルの互換性はあるけどバイナリ互換
> 性はない。Windowses ではバイナリフォーマットの互換性はあるけど
> ソースレベルの互換性はない、とか。
バイナリは一緒にしておく方がベターだと思います。NT 版と 9x 版を
バイナリを分けて使用するのは、ユーザーとしても面倒でしょう。
問題は、SIGINT だけなんですし。
#ひょっとして、うちが NEC Windows 95 だということがちと問題
#だったりすると嫌ですねぇ(^^;;;;
--
青木大輔 <dai@y7.net>