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

ruby-changes:9556

From: nobu <ko1@a...>
Date: Sat, 27 Dec 2008 19:30:21 +0900 (JST)
Subject: [ruby-changes:9556] Ruby:r21096 (trunk): * thread.c (rb_thread_atfork, rb_thread_atfork_before_exec): DRY.

nobu	2008-12-27 19:30:04 +0900 (Sat, 27 Dec 2008)

  New Revision: 21096

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21096

  Log:
    * thread.c (rb_thread_atfork, rb_thread_atfork_before_exec): DRY.

  Modified files:
    trunk/ChangeLog
    trunk/thread.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21095)
+++ ChangeLog	(revision 21096)
@@ -1,3 +1,7 @@
+Sat Dec 27 19:30:01 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* thread.c (rb_thread_atfork, rb_thread_atfork_before_exec): DRY.
+
 Sat Dec 27 18:25:09 2008  Yukihiro Matsumoto  <matz@r...>
 
 	* vm_eval.c (rb_f_loop): return enumerator if no block given.
Index: thread.c
===================================================================
--- thread.c	(revision 21095)
+++ thread.c	(revision 21096)
@@ -2438,14 +2438,29 @@
     }
 }
 
+static void
+rb_thread_atfork_internal(int (*atfork)(st_data_t, st_data_t, st_data_t))
+{
+    rb_thread_t *th = GET_THREAD();
+    rb_vm_t *vm = th->vm;
+    VALUE thval = th->self;
+    vm->main_thread = th;
+
+    st_foreach(vm->living_threads, atfork, (st_data_t)th);
+    st_clear(vm->living_threads);
+    st_insert(vm->living_threads, thval, (st_data_t)th->thread_id);
+    vm->sleeper = 0;
+    clear_coverage();
+}
+
 static int
-terminate_atfork_i(st_data_t key, st_data_t val, rb_thread_t *current_th)
+terminate_atfork_i(st_data_t key, st_data_t val, st_data_t current_th)
 {
     VALUE thval = key;
     rb_thread_t *th;
     GetThreadPtr(thval, th);
 
-    if (th != current_th) {
+    if (th != (rb_thread_t *)current_th) {
 	thread_cleanup_func(th);
     }
     return ST_CONTINUE;
@@ -2454,27 +2469,18 @@
 void
 rb_thread_atfork(void)
 {
-    rb_thread_t *th = GET_THREAD();
-    rb_vm_t *vm = th->vm;
-    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);
-    vm->sleeper = 0;
-    clear_coverage();
+    rb_thread_atfork_internal(terminate_atfork_i);
     rb_reset_random_seed();
 }
 
 static int
-terminate_atfork_before_exec_i(st_data_t key, st_data_t val, rb_thread_t *current_th)
+terminate_atfork_before_exec_i(st_data_t key, st_data_t val, st_data_t current_th)
 {
     VALUE thval = key;
     rb_thread_t *th;
     GetThreadPtr(thval, th);
 
-    if (th != current_th) {
+    if (th != (rb_thread_t *)current_th) {
 	thread_cleanup_func_before_exec(th);
     }
     return ST_CONTINUE;
@@ -2483,16 +2489,7 @@
 void
 rb_thread_atfork_before_exec(void)
 {
-    rb_thread_t *th = GET_THREAD();
-    rb_vm_t *vm = th->vm;
-    VALUE thval = th->self;
-    vm->main_thread = th;
-
-    st_foreach(vm->living_threads, terminate_atfork_before_exec_i, (st_data_t)th);
-    st_clear(vm->living_threads);
-    st_insert(vm->living_threads, thval, (st_data_t) th->thread_id);
-    vm->sleeper = 0;
-    clear_coverage();
+    rb_thread_atfork_internal(terminate_atfork_before_exec_i);
 }
 
 struct thgroup {

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

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