新井です。

>>> From: Koji Arai <JCA02266 / nifty.ne.jp>
>>> Date: 02 Dec 1999 20:09:48 +0900
>>> Subject: [ruby-dev:8502] Re: require で SEGV

> 新井です。

> rb_f_require()の最初の方の rb_provided() で、"nkf.o"
> は弾かれてないとダメなんだと思います。

ちょっとソースを見直してみました。

うーん、必要ないといえばないのかな?でも、わかりにくいですね。

> あと、loading_tbl ってst_delete()してますが
> どこにも、st_insert()してる場所がないような。
> 
> # でも、デッドロックが恐いのでパッチはださない(Thread苦手)

といいつつ書いてしまった(やっぱ閑人らしい)。ま、お勉強ってこ
とで、あってますか?
# 最初から勘違いだったりして

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/02 11:58:15
@@ -7361,10 +7361,14 @@ 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)) {
+	if (!loading_tbl) {
+	    loading_tbl = st_init_strtable();
+	}
+	st_insert(loading_tbl, feature, 0);
+	return Qfalse; /* need to load */
     }
+
     while (st_lookup(loading_tbl, feature, 0)) {
 	CHECK_INTS;
 	rb_thread_schedule();