なかだです。

[ruby-dev:18582]を調べてて思い出したんですが、初期化中にSIGINT
でSEGVするという件(元記事が見付からない…)はどうしましょうか。
ruby_init()でエラーを返すようにしても、旧来のソースでは単に無視
するだけで同じ動作、バイナリでもほとんどのプラットフォームでは
同じになると思います。


Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.344 diff -u -2 -p -r1.344 eval.c --- eval.c 25 Oct 2002 18:39:29 -0000 1.344 +++ eval.c 29 Oct 2002 00:43:34 -0000 @@ -1059,5 +1059,5 @@ void Init_heap _((void)); void Init_ext _((void)); -void +int ruby_init() { @@ -1107,4 +1107,6 @@ ruby_init() POP_SCOPE(); ruby_scope = top_scope; + rb_prohibit_interrupt = 0; + return state; } Index: main.c =================================================================== RCS file: /cvs/ruby/src/ruby/main.c,v retrieving revision 1.8 diff -u -2 -p -r1.8 main.c --- main.c 18 Apr 2002 08:46:18 -0000 1.8 +++ main.c 29 Oct 2002 00:51:52 -0000 @@ -39,5 +39,6 @@ main(argc, argv, envp) char **argv, **envp; { + int state; #if defined(NT) NtInitialize(&argc, &argv); @@ -46,5 +47,5 @@ main(argc, argv, envp) #endif - ruby_init(); + if ((state = ruby_init()) != 0) return state; ruby_options(argc, argv); ruby_run(); Index: signal.c =================================================================== RCS file: /cvs/ruby/src/ruby/signal.c,v retrieving revision 1.37 diff -u -2 -p -r1.37 signal.c --- signal.c 28 Aug 2002 14:59:01 -0000 1.37 +++ signal.c 29 Oct 2002 00:44:43 -0000 @@ -272,5 +272,5 @@ static rb_atomic_t trap_pending_list[NSI rb_atomic_t rb_trap_pending; rb_atomic_t rb_trap_immediate; -int rb_prohibit_interrupt; +int rb_prohibit_interrupt = 1; void Index: ruby.h =================================================================== RCS file: /cvs/ruby/src/ruby/ruby.h,v retrieving revision 1.70 diff -u -2 -p -r1.70 ruby.h --- ruby.h 9 Sep 2002 10:26:02 -0000 1.70 +++ ruby.h 29 Oct 2002 00:42:47 -0000 @@ -536,5 +536,5 @@ NORETURN(void rb_throw _((const char*,VA VALUE rb_require _((const char*)); -void ruby_init _((void)); +int ruby_init _((void)); void ruby_options _((int, char**)); void ruby_run _((void));
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦