ruby-changes:26025
From: kosaki <ko1@a...>
Date: Sat, 1 Dec 2012 02:42:52 +0900 (JST)
Subject: [ruby-changes:26025] kosaki:r38082 (trunk): * thread.c (rb_threadptr_interrupt_mask, async_interrupt_timing_func):
kosaki 2012-12-01 02:39:59 +0900 (Sat, 01 Dec 2012) New Revision: 38082 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=38082 Log: * thread.c (rb_threadptr_interrupt_mask, async_interrupt_timing_func): merge into them into rb_thread_s_async_interrupt_timing. * thread.c (rb_thread_s_async_interrupt_timing): ditto. Modified files: trunk/ChangeLog trunk/thread.c Index: ChangeLog =================================================================== --- ChangeLog (revision 38081) +++ ChangeLog (revision 38082) @@ -1,3 +1,9 @@ +Sat Dec 1 02:33:20 2012 KOSAKI Motohiro <kosaki.motohiro@g...> + + * thread.c (rb_threadptr_interrupt_mask, async_interrupt_timing_func): + merge into them into rb_thread_s_async_interrupt_timing. + * thread.c (rb_thread_s_async_interrupt_timing): ditto. + Sat Dec 1 02:11:47 2012 KOSAKI Motohiro <kosaki.motohiro@g...> * thread.c (rb_threadptr_interrupt_mask): add argument check. Index: thread.c =================================================================== --- thread.c (revision 38081) +++ thread.c (revision 38082) @@ -1559,40 +1559,6 @@ return ST_CONTINUE; } -static VALUE -rb_threadptr_interrupt_mask(rb_thread_t *th, VALUE mask, VALUE (*func)(rb_thread_t *th)) -{ - VALUE r = Qnil; - int state; - - rb_hash_foreach(mask, async_interrupt_timing_arg_check_i, 0); - rb_ary_push(th->async_errinfo_mask_stack, mask); - if (!rb_threadptr_async_errinfo_empty_p(th)) { - th->async_errinfo_queue_checked = 0; - RUBY_VM_SET_INTERRUPT(th); - } - - TH_PUSH_TAG(th); - if ((state = EXEC_TAG()) == 0) { - r = func(th); - } - TH_POP_TAG(); - - rb_ary_pop(th->async_errinfo_mask_stack); - if (!rb_threadptr_async_errinfo_empty_p(th)) { - th->async_errinfo_queue_checked = 0; - RUBY_VM_SET_INTERRUPT(th); - } - - if (state) { - JUMP_TAG(state); - } - - RUBY_VM_CHECK_INTS(th); - - return r; -} - /* * call-seq: * Thread.async_interrupt_timing(hash) { ... } -> result of the block @@ -1673,23 +1639,45 @@ * } * */ - static VALUE -async_interrupt_timing_func(rb_thread_t *th) -{ - return rb_yield(Qnil); -} - -static VALUE rb_thread_s_async_interrupt_timing(VALUE self, VALUE mask_arg) { + VALUE mask; + rb_thread_t *th = GET_THREAD(); + VALUE r = Qnil; + int state; + if (!rb_block_given_p()) { rb_raise(rb_eArgError, "block is needed."); } - return rb_threadptr_interrupt_mask(GET_THREAD(), - rb_convert_type(mask_arg, T_HASH, "Hash", "to_hash"), - async_interrupt_timing_func); + mask = rb_convert_type(mask_arg, T_HASH, "Hash", "to_hash"); + rb_hash_foreach(mask, async_interrupt_timing_arg_check_i, 0); + rb_ary_push(th->async_errinfo_mask_stack, mask); + if (!rb_threadptr_async_errinfo_empty_p(th)) { + th->async_errinfo_queue_checked = 0; + RUBY_VM_SET_INTERRUPT(th); + } + + TH_PUSH_TAG(th); + if ((state = EXEC_TAG()) == 0) { + r = rb_yield(Qnil); + } + TH_POP_TAG(); + + rb_ary_pop(th->async_errinfo_mask_stack); + if (!rb_threadptr_async_errinfo_empty_p(th)) { + th->async_errinfo_queue_checked = 0; + RUBY_VM_SET_INTERRUPT(th); + } + + if (state) { + JUMP_TAG(state); + } + + RUBY_VM_CHECK_INTS(th); + + return r; } /* -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/