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/