[#11952] NORETURN — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

24 messages 2001/01/10
[#11956] Re: NORETURN — WATANABE Hirofumi <eban@...> 2001/01/10

わたなべです.

[#11957] Re: NORETURN — matz@... (Yukihiro Matsumoto) 2001/01/10

まつもと ゆきひろです

[#11958] Re: NORETURN — WATANABE Hirofumi <eban@...> 2001/01/10

わたなべです.

[#11959] CVS branches (Re: Re: NORETURN) — matz@... (Yukihiro Matsumoto) 2001/01/10

[#12087] string#index, gsub, []= のバグ? — Beyond <beyond@...>

18 messages 2001/01/27
[#12091] Re: string#index, gsub, []= のバグ? — matz@... (Yukihiro Matsumoto) 2001/01/27

まつもと ゆきひろです

[ruby-dev:12076] GC 内部で落ちる件

From: "T.Shimomura" <redbugml@...>
Date: 2001-01-26 05:38:44 UTC
List: ruby-dev #12076
T.Shimomura です。

マルチスレッドで動作するアプリケーションに Ruby を組み込んだ場合の話です
が、ruby_init() を呼んだのと別のスレッドから rb_eval_string() を呼ぶと、
Ruby の内部でアクセス違反を起こしてアプリごと落ちることがあります。
(Windows 2000 の場合。他のOSでは試してないのでわかりません)

いろいろ調べてみたのですが、ruby_init() 実行時とガベージコレクタ実行時の
スレッドが異なっていると、スタック領域の計算に失敗してスタックじゃない
領域をアクセスしてしまっているみたいです。

Ruby の GC をマルチスレッド対応にする方法なんて思い浮かばなかったので、
ruby_init() を呼んだのと別のスレッドから rb_eval_string() を呼ぶ場合、
一時的に GC を無効にすることで対応しています。
#rb_eval_string() を使わずに GC の有効/無効を制御する方法がわからなかっ
#たので、GC.c の gc_enable() と gc_disable() を外部から見えるようにして、
#それをアプリ側から呼ぶようにしました。

アプリの方でスレッドの違いを気にしなくてもいいように、Ruby の内部だけで
対応してもらえれば一番いいのですが、そういうのは難しいでしょうか。

-- 
T.Shimomura
redbug@netlife.gr.jp

In This Thread

Prev Next