新井です。

>>> From: matz / netlab.co.jp (Yukihiro Matsumoto)
>>> Date: 03 Dec 1999 20:49:24 +0900
>>> Subject: [ruby-dev:8519] Re: require で SEGV

> まつもと ゆきひろです

> |あと、loading_tbl ってst_delete()してますが
> |どこにも、st_insert()してる場所がないような。
> 
> これまたそうですね。[ruby-dev:8504]のパッチを取り込んでおき
> ます。

あっと、ごめんなさい。バグってました。以下でお願いします。

[ruby-dev:8504]のだと、例えばnkf.oのチェックがあまい今なら、

 $" << "nkf.so"
 require "nkf.o"

で落ちます。

Index: eval.c
===================================================================
RCS file: /home/cvs/ruby/eval.c,v
retrieving revision 1.20
diff -u -p -u -r1.20 eval.c
--- eval.c	1999/12/02 06:58:47	1.20
+++ eval.c	1999/12/03 13:42:15
@@ -7361,10 +7361,15 @@ static int
 rb_thread_loading(feature)
     const char *feature;
 {
-    if (!rb_provided(feature)) return Qfalse; /* need to load */
     if (!loading_tbl) {
 	loading_tbl = st_init_strtable();
     }
+
+    if (!rb_provided(feature)) {
+	st_insert(loading_tbl, feature, 0);
+	return Qfalse; /* need to load */
+    }
+
     while (st_lookup(loading_tbl, feature, 0)) {
 	CHECK_INTS;
 	rb_thread_schedule();

--
新井康司 (Koji Arai)