[前][次][番号順一覧][スレッド一覧]

ruby-changes:3555

From: ko1@a...
Date: Mon, 14 Jan 2008 19:03:05 +0900 (JST)
Subject: [ruby-changes:3555] ko1 - Ruby:r15044 (trunk): * thread.c: clear thread structure.

ko1	2008-01-14 19:02:51 +0900 (Mon, 14 Jan 2008)

  New Revision: 15044

  Modified files:
    trunk/ChangeLog
    trunk/bootstraptest/test_thread.rb
    trunk/thread.c

  Log:
    * thread.c: clear thread structure.
      (TODO: survey that child process should clear mutex or not).
    * bootstraptest/test_knownbug.rb, test_thread.rb: move a fixed test.
    


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15044&r2=15043&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/thread.c?r1=15044&r2=15043&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/bootstraptest/test_thread.rb?r1=15044&r2=15043&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 15043)
+++ ChangeLog	(revision 15044)
@@ -1,3 +1,10 @@
+Mon Jan 14 18:53:58 2008  Koichi Sasada  <ko1@a...>
+
+	* thread.c: clear thread structure.
+	  (TODO: survey that child process should clear mutex or not).
+
+	* bootstraptest/test_knownbug.rb, test_thread.rb: move a fixed test.
+
 Mon Jan 14 18:43:38 2008  Koichi Sasada  <ko1@a...>
 
 	* bootstraptest/runner.rb: add "flunk" method.
Index: bootstraptest/test_thread.rb
===================================================================
--- bootstraptest/test_thread.rb	(revision 15043)
+++ bootstraptest/test_thread.rb	(revision 15044)
@@ -193,3 +193,11 @@
   100
 end
 }, '[ruby-dev:31371]'
+assert_equal 'true', %{
+  t = Thread.new { loop {} }
+  pid = fork {
+      exit t.status != "run"
+  }
+  Process.wait pid
+  $?.success?
+}
Index: thread.c
===================================================================
--- thread.c	(revision 15043)
+++ thread.c	(revision 15044)
@@ -1955,8 +1955,19 @@
     rb_thread_create_timer_thread();
 }
 
-/***/
+static int
+terminate_atfork_i(st_data_t key, st_data_t val, rb_thread_t *current_th)
+{
+    VALUE thval = key;
+    rb_thread_t *th;
+    GetThreadPtr(thval, th);
 
+    if (th != current_th) {
+	thread_cleanup_func(th);
+    }
+    return ST_CONTINUE;
+}
+
 void
 rb_thread_atfork(void)
 {
@@ -1965,6 +1976,7 @@
     VALUE thval = th->self;
     vm->main_thread = th;
 
+    st_foreach(vm->living_threads, terminate_atfork_i, (st_data_t)th);
     st_clear(vm->living_threads);
     st_insert(vm->living_threads, thval, (st_data_t) th->thread_id);
 }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]