[#10793] 今度こそ (patch of the ruby-1.4.6 for NT4.0&VC4.0 on DEC Alpha.) — kou@...1609.sip.eee.yamaguchi-u.ac.jp (Koichi Okada)

岡田です。

10 messages 2000/09/01

[#10920] SIGINT on windows — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

17 messages 2000/09/14
[#11077] Re: SIGINT on windows — matz@... (Yukihiro Matsumoto) 2000/09/27

まつもと ゆきひろです

[#10944] dummy DLL on Windows — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

19 messages 2000/09/18
[#10955] Re: dummy DLL on Windows — WATANABE Hirofumi <eban@...> 2000/09/19

わたなべです.

[#10963] Re: dummy DLL on Windows — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/09/19

なかだです。

[#10964] Re: dummy DLL on Windows — WATANABE Hirofumi <eban@...> 2000/09/19

わたなべです.

[#10978] [PATCH] require in require — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

15 messages 2000/09/20

[#10985] httphead.rb proxy version problem — Katsuyuki Komatsu <komatsu@...>

小松です.

16 messages 2000/09/20
[#10989] Re: httphead.rb proxy version problem — Minero Aoki <aamine@...> 2000/09/20

あおきです。

[ruby-dev:10983] Re: [PATCH] require in require

From: "Nobuyoshi.Nakada" <nobu.nakada@...>
Date: 2000-09-20 09:25:30 UTC
List: ruby-dev #10983
なかだです。

At Wed, 20 Sep 2000 14:04:50 +0900
matz@zetabits.com (Yukihiro Matsumoto) wrote:
> |  てな感じでデッドロックします。
> |
> |  一応こんな風にしてみました。
> 
> そーゆーことまではしなくても直るようです。他の問題も合わせ、
> 以下のパッチが有効ではないでしょうか?

  a.rb で require "a" するとやっぱりデッドロックします。まぁ普通こんなこ
とはしませんが、デッドロックはまずいかなと。おまけに busy loop だし。

  あと [ruby-dev:10978] は一ヶ所間違ってました。Qfalse じゃなくて Qtrue 
を返さないと。


diff -pruPX ./.excludes current/dir.c devel/dir.c
--- current/dir.c	Mon Aug  7 14:01:46 2000
+++ devel/dir.c	Wed Sep  6 10:12:13 2000
@@ -5052,9 +5054,13 @@ rb_provided(feature)
   load_wait:
     if (loading_tbl) {
 	char *ext = strrchr(f, '.');
+	char *loading_thread;
 	if (strcmp(ext, ".rb") == 0) {
-	    while (st_lookup(loading_tbl, f, 0)) {
+	    while (st_lookup(loading_tbl, f, &loading_thread)) {
 		CHECK_INTS;
+		if ((VALUE)loading_thread == rb_thread_current()) {
+		    return Qtrue;
+		}
 		rb_thread_schedule();
 	    }
 	}
@@ -5186,7 +5192,7 @@ rb_f_require(obj, fname)
     if (!loading_tbl) {
 	loading_tbl = st_init_strtable();
     }
-    st_insert(loading_tbl, strdup(feature), 0);	/* partial state */
+    st_insert(loading_tbl, strdup(feature), rb_thread_current());	/* partial state */
 
     PUSH_TAG(PROT_NONE);
     if ((state = EXEC_TAG()) == 0) {


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦


In This Thread