[#27919] 1.8.4 Preview2 検証 — "URABE Shyouhei aka. mput" <root@...>

卜部です。

33 messages 2005/12/01

[#27997] 1.8.4 documents? — "URABE Shyouhei aka. mput" <root@...>

卜部です。

22 messages 2005/12/12
[#28017] Re: 1.8.4 documents? — Koji Arai <jca02266@...> 2005/12/13

新井です。

[#28082] ruby_1_8 Segmentation fault on Cygwin — yanagi@...

柳田です。

13 messages 2005/12/21
[#28083] Re: ruby_1_8 Segmentation fault on Cygwin — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/12/21

山本です。

[#28140] ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — Tanaka Akira <akr@...17n.org>

HP-UX で HP aC++/ANSI C を使って作った ruby で、openssl や drb のテストをすると、

34 messages 2005/12/27
[#28141] Re: ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — WATANABE Tetsuya <Tetsuya.WATANABE@...> 2005/12/28

渡辺哲也です。

[#28142] Re: ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — Tanaka Akira <akr@...17n.org> 2005/12/28

In article <200512280307.jBS37nnj005909@pbsg500.nifty.com>,

[#28147] Re: ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/12/28

山本です。

[#28149] Re: ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — Tanaka Akira <akr@...17n.org> 2005/12/28

In article <20051228210640.13C71A10.ocean@m2.ccsnet.ne.jp>,

[#28151] Re: ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — WATANABE Tetsuya <Tetsuya.WATANABE@...> 2005/12/29

渡辺哲也です。

[#28152] Re: ia64-hpux11.23/socket.sl: this executable file can't load extensionlibraries (LoadError) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/12/29

山本です。

[#28153] Re: ia64-hpux11.23/socket.sl: this executable file can't load extensionlibraries (LoadError) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/12/29

山本です。

[#28154] thread based generator.rb — Tanaka Akira <akr@...17n.org> 2005/12/29

In article <20051229114438.44D19F00.ocean@m2.ccsnet.ne.jp>,

[ruby-dev:28171] Re: thread based generator.rb

From: nobuyoshi nakada <nobuyoshi.nakada@...>
Date: 2005-12-29 09:10:02 UTC
List: ruby-dev #28171
なかだです。

At Thu, 29 Dec 2005 16:12:38 +0900,
Tanaka Akira wrote in [ruby-dev:28166]:
> そして、Thread.list は呼び出されるたびに毎回生きているスレッ
> ドを集めて array を生成していますから、その結果に回収済みの
> オブジェクトを含むことはありません。

そういやそうでした。しかし、ちょっと面倒な感じ。


Index: eval.c
===================================================================
RCS file: /src/ruby/eval.c,v
retrieving revision 1.859
diff -U2 -p -r1.859 eval.c
--- eval.c	27 Dec 2005 16:35:57 -0000	1.859
+++ eval.c	29 Dec 2005 09:03:23 -0000
@@ -9756,4 +9756,17 @@ struct thread {
 #define END_FOREACH(x)    END_FOREACH_FROM(curr_thread,x)
 
+#define FOREACH_LIVE_THREAD_FROM(f, x)	\
+    FOREACH_THREAD_FROM(f, x)		\
+	switch ((x)->status) {		\
+	  case THREAD_TO_KILL:		\
+	  case THREAD_RUNNABLE:		\
+	    break;			\
+	  case THREAD_STOPPED:		\
+	    if ((x)->wait_for) break;	\
+	  default:			\
+	    continue;			\
+	}
+#define FOREACH_LIVE_THREAD(x)	FOREACH_LIVE_THREAD_FROM(curr_thread,x)
+
 struct thread_status_t {
     NODE *node;
@@ -9985,4 +9998,19 @@ static struct {
 } new_thread;
 
+static int
+mark_loading_thread(ID key, VALUE value, int lev)
+{
+    rb_thread_t th = (rb_thread_t)value;
+    rb_gc_mark(th->thread);
+    return ST_CONTINUE;
+}
+
+static void
+mark_loading_tbl()
+{
+    if (!loading_tbl) return;
+    st_foreach(loading_tbl, mark_loading_thread, 0);
+}
+
 void
 rb_gc_mark_threads(void)
@@ -9994,5 +10022,7 @@ rb_gc_mark_threads(void)
 
     if (!curr_thread) return;
-    FOREACH_THREAD_FROM(main_thread, th) {
+    rb_gc_mark(main_thread->thread);
+    rb_gc_mark(curr_thread->thread);
+    FOREACH_LIVE_THREAD_FROM(main_thread, th) {
 	rb_gc_mark(th->thread);
     } END_FOREACH_FROM(main_thread, th);
@@ -10002,4 +10032,5 @@ rb_gc_mark_threads(void)
 	rb_gc_mark(new_thread.arg);
     }
+    mark_loading_tbl();
 }
 
@@ -12528,4 +12559,5 @@ rb_callcc(VALUE self)
 
     THREAD_ALLOC(th);
+    th->status = THREAD_STOPPED;
     cont = Data_Wrap_Struct(rb_cCont, thread_mark, thread_free, th);
 
@@ -12645,5 +12677,5 @@ thgroup_list(VALUE group)
     ary = rb_ary_new();
 
-    FOREACH_THREAD(th) {
+    FOREACH_LIVE_THREAD(th) {
 	if (th->thgroup == data->group) {
 	    rb_ary_push(ary, th->thread);


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

In This Thread