[#11131] Re: SIGINT on windows — Daisuke Aoki <dai@...>

青木です。

36 messages 2000/10/04
[#11217] Re: SIGINT on windows — Daisuke Aoki <dai@...> 2000/10/14

青木です。

[#11250] Re: SIGINT on windows — Daisuke Aoki <dai@...> 2000/10/16

青木です。

[#11258] Re: SIGINT on windows — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/10/17

なかだです。

[#11298] Re: SIGINT on windows — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/10/27

なかだです。

[#11183] EPOC32 and Ruby 1.7 — WATANABE Hirofumi <eban@...>

わたなべです.

44 messages 2000/10/12
[#11188] Re: EPOC32 and Ruby 1.7 — matz@... (Yukihiro Matsumoto) 2000/10/12

まつもと ゆきひろです

[#11191] ruby-bugs-ja PR#20 — Kazuhiro NISHIYAMA <zn@...> 2000/10/12

On Fri, 13 Oct 2000 00:17:14 +0900

[#11205] Re: ruby-bugs-ja PR#20 — Kazuhiro NISHIYAMA <zn@...> 2000/10/13

同じ問題を短いスクリプトで再現できました。

[#11210] Re: Thread.new with irb (PR#20) — matz@... (Yukihiro Matsumoto) 2000/10/13

まつもと ゆきひろです

[#11211] Re: Thread.new with irb (PR#20) — Kazuhiro NISHIYAMA <zn@...> 2000/10/13

On Sat, 14 Oct 2000 03:41:18 +0900

[#11221] Re: Thread.new with irb (PR#20) — Kazuhiro NISHIYAMA <zn@...> 2000/10/14

[ruby-dev:11205]と同じスクリプトで-dをつけていると

[#11306] Ruby I18N — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

130 messages 2000/10/28
[#11307] Re: Ruby I18N — " たけ (tk)" <ggb03124@...> 2000/10/28

たけ(tk)です。

[#11310] Re: Ruby I18N — kenn@... 2000/10/29

長沢です。

[#11314] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/10/29

まつもと ゆきひろです

[#11315] Re: Ruby I18N — Shugo Maeda <shugo@...> 2000/10/30

前田です。

[#11324] Re: Ruby I18N — TAKAHASHI Masayoshi <maki@...> 2000/10/30

高橋征義です。

[#11337] Re: Ruby I18N — Yasushi Shoji <yashi@...> 2000/10/30

At Mon, 30 Oct 2000 13:15:23 +0900,

[#11346] Re: Ruby I18N — TAKAHASHI Masayoshi <maki@...> 2000/10/31

某2ちゃんねるで自分の名前を見つけてびびった高橋征義です。

[#11347] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/10/31

まつもと ゆきひろです

[#11370] Re: Ruby I18N — TAKAHASHI Masayoshi <maki@...> 2000/11/02

高橋征義です。

[#11372] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/02

まつもと ゆきひろです

[#11375] Re: Ruby I18N — TAKAHASHI Masayoshi <maki@...> 2000/11/04

高橋征義です。

[#11378] Re: Ruby I18N — " たけ (tk)" <ggb03124@...> 2000/11/05

たけ(tk)です。

[#11379] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/05

まつもと ゆきひろです

[#11380] Re: Ruby I18N — " たけ (tk)" <ggb03124@...> 2000/11/05

たけ(tk)です。

[#11382] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/05

まつもと ゆきひろです

[#11393] Re: Ruby I18N — "たけ(tk)" <ggb03124@...> 2000/11/07

たけ(tk)です。 ・・ 長文ご注意。

[#11396] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/07

まつもと ゆきひろです

[#11397] Re: Ruby I18N — Yasushi Shoji <yashi@...> 2000/11/07

At Tue, 7 Nov 2000 15:46:29 +0900,

[#11398] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/07

まつもと ゆきひろです

[#11399] Re: Ruby I18N — Tanaka Akira <akr@...17n.org> 2000/11/07

In article <E13t3dt-0002Fp-00@ev.netlab.zetabits.co.jp>,

[#11401] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/07

まつもと ゆきひろです

[#11404] Re: Ruby I18N — "たけ(tk)" <ggb03124@...> 2000/11/07

たけ(tk)です。

[#11406] Re: Ruby I18N — Yasushi Shoji <yashi@...> 2000/11/07

At Tue, 7 Nov 2000 19:06:27 +0900,

[#11407] Re: Ruby I18N — "たけ(tk)" <ggb03124@...> 2000/11/07

たけ(tk)です。

[#11409] Re: Ruby I18N — Minero Aoki <aamine@...> 2000/11/07

あおきです。

[#11423] Re: Ruby I18N — Tanaka Akira <akr@...17n.org> 2000/11/08

In article <E13t4Hq-0002GS-00@ev.netlab.zetabits.co.jp>,

[#11426] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/08

まつもと ゆきひろです

[#11427] Re: Ruby I18N — Tanaka Akira <akr@...17n.org> 2000/11/08

In article <E13tMYW-0002te-00@ev.netlab.zetabits.co.jp>,

[#11428] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/08

まつもと ゆきひろです

[#11430] Re: Ruby I18N — "たけ(tk)" <ggb03124@...> 2000/11/08

たけ(tk)です。

[#11433] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/08

まつもと ゆきひろです

[#11446] 『文字列は文字の配列か』 — " たけ (tk)" <ggb03124@...> 2000/11/08

たけ(tk)です。

[#11470] Proposal of "Array of CharCode" — " たけ (tk)" <ggb03124@...> 2000/11/10

たけ(tk)です。

[#11471] Re: Proposal of "Array of CharCode" — matz@... (Yukihiro Matsumoto) 2000/11/10

まつもと ゆきひろです

[#11450] Re: Ruby I18N — Tanaka Akira <akr@...17n.org> 2000/11/09

In article <E13tNkT-00030l-00@ev.netlab.zetabits.co.jp>,

[ruby-dev:11141] Re: SIGINT on windows

From: Daisuke Aoki <dai@...>
Date: 2000-10-06 15:27:29 UTC
List: ruby-dev #11141
青木です。

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>

In This Thread