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

ruby-changes:20036

From: nagachika <ko1@a...>
Date: Tue, 14 Jun 2011 21:58:01 +0900 (JST)
Subject: [ruby-changes:20036] nagachika:r32083 (trunk): * cont.c (cont_save_thread): add new utility function.

nagachika	2011-06-14 21:57:50 +0900 (Tue, 14 Jun 2011)

  New Revision: 32083

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

  Log:
    * cont.c (cont_save_thread): add new utility function.
      rb_context_t::saved_thread.machine_stack_start and
      machine_stack_end should be cleared immediately after a snapshot of
      current thread is stored to saved_thread.
      this change aims to get rid of unnecessary GC mark at machine stack.

  Modified files:
    trunk/ChangeLog
    trunk/cont.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 32082)
+++ ChangeLog	(revision 32083)
@@ -1,3 +1,11 @@
+Tue Jun 14 21:26:01 2011  CHIKANAGA Tomoyuki  <nagachika00@g...>
+
+	* cont.c (cont_save_thread): add new utility function.
+	  rb_context_t::saved_thread.machine_stack_start and
+	  machine_stack_end should be cleared immediately after a snapshot of
+	  current thread is stored to saved_thread.
+	  this change aims to get rid of unnecessary GC mark at machine stack.
+
 Tue Jun 14 19:50:49 2011  Tanaka Akira  <akr@f...>
 
 	* test/ruby/test_autoload.rb: remove temporary directory.
Index: cont.c
===================================================================
--- cont.c	(revision 32082)
+++ cont.c	(revision 32083)
@@ -366,11 +366,6 @@
 
     MEMCPY(cont->machine_register_stack, cont->machine_register_stack_src, VALUE, size);
 #endif
-
-    sth->machine_stack_start = sth->machine_stack_end = 0;
-#ifdef __ia64
-    sth->machine_register_stack_start = sth->machine_register_stack_end = 0;
-#endif
 }
 
 static const rb_data_type_t cont_data_type = {
@@ -379,12 +374,26 @@
 };
 
 static void
+cont_save_thread(rb_context_t *cont, rb_thread_t *th)
+{
+    /* save thread context */
+    cont->saved_thread = *th;
+    /* saved_thread->machine_stack_(start|end) should be NULL */
+    /* because it may happen GC afterward */
+    cont->saved_thread.machine_stack_start = 0;
+    cont->saved_thread.machine_stack_end = 0;
+#ifdef __ia64
+    cont->saved_thread.machine_register_stack_start = 0
+    cont->saved_thread.machine_register_stack_end = 0
+#endif
+}
+
+static void
 cont_init(rb_context_t *cont, rb_thread_t *th)
 {
     /* save thread context */
-    cont->saved_thread = *th;
+    cont_save_thread(cont, th);
     cont->saved_thread.local_storage = 0;
-    cont->saved_thread.machine_stack_start = cont->saved_thread.machine_stack_end = 0;
 }
 
 static rb_context_t *
@@ -1006,9 +1015,6 @@
 
     fiber_link_join(fib);
 
-    /*cont->machine_stack, th->machine_stack_start and th->machine_stack_end should be NULL*/
-    /*because it may happen GC at th->stack allocation*/
-    th->machine_stack_start = th->machine_stack_end = 0;
     th->stack_size = FIBER_VM_STACK_SIZE;
     th->stack = ALLOC_N(VALUE, th->stack_size);
 
@@ -1175,7 +1181,7 @@
 
     if (th->fiber) {
 	GetFiberPtr(th->fiber, fib);
-	fib->cont.saved_thread = *th;
+	cont_save_thread(&fib->cont, th);
     }
     else {
 	/* create current fiber */

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

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