[#18440] racc segv revisited — "Akinori MUSHA" <knu@...>

 次のバグの件なんですが、現時点では原因究明を含めて未解決という

24 messages 2002/10/02
[#18617] Re: racc segv revisited — "Akinori MUSHA" <knu@...> 2002/11/02

At Wed, 2 Oct 2002 23:19:59 +0900,

[ruby-dev:18602] interrupt while initializaion

From: nobu.nakada@...
Date: 2002-10-29 00:53:24 UTC
List: ruby-dev #18602
なかだです。

[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はできる。
    中田 伸悦

In This Thread

Prev Next