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

ruby-changes:25807

From: kosaki <ko1@a...>
Date: Mon, 26 Nov 2012 21:17:21 +0900 (JST)
Subject: [ruby-changes:25807] kosaki:r37864 (trunk): * vm_core.h (RUBY_VM_SET_TIMER_INTERRUPT, RUBY_VM_SET_INTERRUPT)

kosaki	2012-11-26 21:17:10 +0900 (Mon, 26 Nov 2012)

  New Revision: 37864

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

  Log:
    * vm_core.h (RUBY_VM_SET_TIMER_INTERRUPT, RUBY_VM_SET_INTERRUPT)
    (RUBY_VM_SET_FINALIZER_INTERRUPT, RUBY_VM_SET_TRAP_INTERRUPT)
    (RUBY_VM_INTERRUPTED): use enum symbol instead of immediate value.
    * thread.c (thread_join_m, rb_threadptr_execute_interrupts): ditto.
    * signal.c (signal_exec): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/signal.c
    trunk/thread.c
    trunk/vm_core.h

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 37863)
+++ ChangeLog	(revision 37864)
@@ -1,3 +1,11 @@
+Mon Nov 26 21:16:04 2012  KOSAKI Motohiro  <kosaki.motohiro@g...>
+
+	* vm_core.h (RUBY_VM_SET_TIMER_INTERRUPT, RUBY_VM_SET_INTERRUPT)
+	(RUBY_VM_SET_FINALIZER_INTERRUPT, RUBY_VM_SET_TRAP_INTERRUPT)
+	(RUBY_VM_INTERRUPTED): use enum symbol instead of immediate value.
+	* thread.c (thread_join_m, rb_threadptr_execute_interrupts): ditto.
+	* signal.c (signal_exec): ditto.
+
 Mon Nov 26 20:23:20 2012  KOSAKI Motohiro  <kosaki.motohiro@g...>
 
 	* thread.c (thread_join_m): use th->interrupt_mask instead of
Index: vm_core.h
===================================================================
--- vm_core.h	(revision 37863)
+++ vm_core.h	(revision 37864)
@@ -855,11 +855,18 @@
 #error "unsupported thread model"
 #endif
 
-#define RUBY_VM_SET_TIMER_INTERRUPT(th)		ATOMIC_OR((th)->interrupt_flag, 0x01)
-#define RUBY_VM_SET_INTERRUPT(th)		ATOMIC_OR((th)->interrupt_flag, 0x02)
-#define RUBY_VM_SET_FINALIZER_INTERRUPT(th)	ATOMIC_OR((th)->interrupt_flag, 0x04)
-#define RUBY_VM_SET_TRAP_INTERRUPT(th)		ATOMIC_OR((th)->interrupt_flag, 0x08)
-#define RUBY_VM_INTERRUPTED(th) ((th)->interrupt_flag & 0x0A & ~(th)->interrupt_mask)
+enum {
+    TIMER_INTERRUPT_MASK	 = 0x01,
+    ASYNC_ERRINFO_INTERRUPT_MASK = 0x02,
+    FINALIZER_INTERRUPT_MASK     = 0x04,
+    TRAP_INTERRUPT_MASK		 = 0x08
+};
+
+#define RUBY_VM_SET_TIMER_INTERRUPT(th)		ATOMIC_OR((th)->interrupt_flag, TIMER_INTERRUPT_MASK)
+#define RUBY_VM_SET_INTERRUPT(th)		ATOMIC_OR((th)->interrupt_flag, ASYNC_ERRINFO_INTERRUPT_MASK)
+#define RUBY_VM_SET_FINALIZER_INTERRUPT(th)	ATOMIC_OR((th)->interrupt_flag, FINALIZER_INTERRUPT_MASK)
+#define RUBY_VM_SET_TRAP_INTERRUPT(th)		ATOMIC_OR((th)->interrupt_flag, TRAP_INTERRUPT_MASK)
+#define RUBY_VM_INTERRUPTED(th) ((th)->interrupt_flag & ~(th)->interrupt_mask & (ASYNC_ERRINFO_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
 #define RUBY_VM_INTERRUPTED_ANY(th) ((th)->interrupt_flag & ~(th)->interrupt_mask)
 
 int rb_signal_buff_size(void);
Index: thread.c
===================================================================
--- thread.c	(revision 37863)
+++ thread.c	(revision 37864)
@@ -810,7 +810,8 @@
     double delay = DELAY_INFTY;
     VALUE limit;
 
-    if (cur_th->interrupt_mask & 0x08) {
+    /* When running trap handler */
+    if (cur_th->interrupt_mask & TRAP_INTERRUPT_MASK) {
 	rb_raise(rb_eThreadError, "can't be called from trap context");
     }
 
@@ -1747,10 +1748,10 @@
 	if (!interrupt)
 	    return;
 
-	timer_interrupt = interrupt & 0x01;
-	async_errinfo_interrupt = interrupt & 0x02;
-	finalizer_interrupt = interrupt & 0x04;
-	trap_interrupt = interrupt & 0x08;
+	timer_interrupt = interrupt & TIMER_INTERRUPT_MASK;
+	async_errinfo_interrupt = interrupt & ASYNC_ERRINFO_INTERRUPT_MASK;
+	finalizer_interrupt = interrupt & FINALIZER_INTERRUPT_MASK;
+	trap_interrupt = interrupt & TRAP_INTERRUPT_MASK;
 
 	th->status = THREAD_RUNNABLE;
 
Index: signal.c
===================================================================
--- signal.c	(revision 37863)
+++ signal.c	(revision 37864)
@@ -627,7 +627,7 @@
     volatile unsigned long old_interrupt_mask = cur_th->interrupt_mask;
     int state;
 
-    cur_th->interrupt_mask |= 0x08;
+    cur_th->interrupt_mask |= TRAP_INTERRUPT_MASK;
     TH_PUSH_TAG(cur_th);
     if ((state = EXEC_TAG()) == 0) {
 	VALUE signum = INT2NUM(sig);

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

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