[#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:28173] Re: thread based generator.rb

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

At Thu, 29 Dec 2005 18:55:09 +0900,
Tanaka Akira wrote in [ruby-dev:28172]:
> 考えたのですが、thread 内の ensure で後始末をしたいと考える
> と、mark されなかったスレッドは改めて mark した上で aborting
> 状態に遷移させるべきかも。

うーん、こんなところかな。

> さらに面倒?

ですねぇ。


* eval.c (rb_gc_mark_threads): keep unmarked threads which won't wake
  up alone, and mark threads in the loading table.  [ruby-dev:28154]

* eval.c (rb_gc_abort_threads), gc.c (gc_sweep): kill unmarked
  threads.  [ruby-dev:28172]


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 10:30:32 -0000
@@ -9985,4 +9985,11 @@ static struct {
 } new_thread;
 
+static int
+mark_loading_thread(ID key, VALUE value, int lev)
+{
+    rb_gc_mark(((rb_thread_t)value)->thread);
+    return ST_CONTINUE;
+}
+
 void
 rb_gc_mark_threads(void)
@@ -9994,5 +10001,16 @@ rb_gc_mark_threads(void)
 
     if (!curr_thread) return;
+    rb_gc_mark(main_thread->thread);
+    rb_gc_mark(curr_thread->thread);
     FOREACH_THREAD_FROM(main_thread, th) {
+	switch (th->status) {
+	  case THREAD_TO_KILL:
+	  case THREAD_RUNNABLE:
+	    break;
+	  case THREAD_STOPPED:
+	    if (th->wait_for) break;
+	  default:
+	    continue;
+	}
 	rb_gc_mark(th->thread);
     } END_FOREACH_FROM(main_thread, th);
@@ -10002,4 +10020,19 @@ rb_gc_mark_threads(void)
 	rb_gc_mark(new_thread.arg);
     }
+    if (loading_tbl) st_foreach(loading_tbl, mark_loading_thread, 0);
+}
+
+void
+rb_gc_abort_threads(void)
+{
+    rb_thread_t th;
+
+    FOREACH_THREAD_FROM(main_thread, th) {
+	if (FL_TEST(th->thread, FL_MARK)) continue;
+	if (th->status == THREAD_STOPPED) {
+	    th->status = THREAD_TO_KILL;
+	    rb_gc_mark(th->thread);
+	}
+    } END_FOREACH_FROM(main_thread, th);
 }
 
Index: gc.c
===================================================================
RCS file: /src/ruby/gc.c,v
retrieving revision 1.224
diff -U2 -p -r1.224 gc.c
--- gc.c	27 Dec 2005 05:40:04 -0000	1.224
+++ gc.c	29 Dec 2005 10:30:32 -0000
@@ -1016,4 +1016,6 @@ gc_sweep(void)
     }
 
+    rb_gc_abort_threads();
+
     freelist = 0;
     final_list = deferred_final_list;


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

In This Thread