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

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/

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