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

ruby-changes:39192

From: normal <ko1@a...>
Date: Fri, 17 Jul 2015 05:43:01 +0900 (JST)
Subject: [ruby-changes:39192] normal:r51273 (trunk): avoid redundant GET_THREAD() calls

normal	2015-07-17 05:42:43 +0900 (Fri, 17 Jul 2015)

  New Revision: 51273

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

  Log:
    avoid redundant GET_THREAD() calls
    
    This reduces binary size slightly on my 32-bit system:
    
       text    data     bss     dec     hex filename
    2847705   12360   30632 2890697  2c1bc9 ruby.orig
    2847641   12360   30632 2890633  2c1b89 ruby
    
    * iseq.c (rb_iseq_compile_with_option): reuse result of previous
      GET_THREAD() call
    * thread.c (thread_create_core): ditto
      (rb_mutex_trylock): ditto
      (rb_mutex_lock): ditto
    * process.c (rb_waitpid): avoid multiple eval from RUBY_VM_CHECK_INTS
    * thread.c (rb_thread_check_ints): ditto

  Modified files:
    trunk/ChangeLog
    trunk/iseq.c
    trunk/process.c
    trunk/thread.c
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 51272)
+++ ChangeLog	(revision 51273)
@@ -1,3 +1,13 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Fri Jul 17 05:33:58 2015  Eric Wong  <e@8...>
+
+	* iseq.c (rb_iseq_compile_with_option): reuse result of previous
+	  GET_THREAD() call
+	* thread.c (thread_create_core): ditto
+	  (rb_mutex_trylock): ditto
+	  (rb_mutex_lock): ditto
+	* process.c (rb_waitpid): avoid multiple eval from RUBY_VM_CHECK_INTS
+	* thread.c (rb_thread_check_ints): ditto
+
 Thu Jul 16 19:12:30 2015  Eric Wong  <e@8...>
 
 	* thread.c (mutex_alloc): remove needless volatile
Index: iseq.c
===================================================================
--- iseq.c	(revision 51272)
+++ iseq.c	(revision 51273)
@@ -568,7 +568,7 @@ rb_iseq_compile_with_option(VALUE src, V https://github.com/ruby/ruby/blob/trunk/iseq.c#L568
 	    node = rb_parser_compile_string_path(parser, file, src, ln);
 
 	    if (!node) {
-		rb_exc_raise(GET_THREAD()->errinfo);	/* TODO: check err */
+		rb_exc_raise(th->errinfo);	/* TODO: check err */
 	    }
 	}
 
Index: thread.c
===================================================================
--- thread.c	(revision 51272)
+++ thread.c	(revision 51273)
@@ -670,7 +670,7 @@ thread_create_core(VALUE thval, VALUE ar https://github.com/ruby/ruby/blob/trunk/thread.c#L670
     rb_thread_t *th, *current_th = GET_THREAD();
     int err;
 
-    if (OBJ_FROZEN(GET_THREAD()->thgroup)) {
+    if (OBJ_FROZEN(current_th->thgroup)) {
 	rb_raise(rb_eThreadError,
 		 "can't start a new thread (frozen ThreadGroup)");
     }
@@ -1173,7 +1173,8 @@ rb_thread_wait_for(struct timeval time) https://github.com/ruby/ruby/blob/trunk/thread.c#L1173
 void
 rb_thread_check_ints(void)
 {
-    RUBY_VM_CHECK_INTS_BLOCKING(GET_THREAD());
+    rb_thread_t *th = GET_THREAD();
+    RUBY_VM_CHECK_INTS_BLOCKING(th);
 }
 
 /*
@@ -4258,10 +4259,11 @@ rb_mutex_trylock(VALUE self) https://github.com/ruby/ruby/blob/trunk/thread.c#L4259
 
     native_mutex_lock(&mutex->lock);
     if (mutex->th == 0) {
-	mutex->th = GET_THREAD();
+	rb_thread_t *th = GET_THREAD();
+	mutex->th = th;
 	locked = Qtrue;
 
-	mutex_locked(GET_THREAD(), self);
+	mutex_locked(th, self);
     }
     native_mutex_unlock(&mutex->lock);
 
@@ -4345,7 +4347,7 @@ rb_mutex_lock(VALUE self) https://github.com/ruby/ruby/blob/trunk/thread.c#L4347
     }
 
     if (rb_mutex_trylock(self) == Qfalse) {
-	if (mutex->th == GET_THREAD()) {
+	if (mutex->th == th) {
 	    rb_raise(rb_eThreadError, "deadlock; recursive locking");
 	}
 
Index: process.c
===================================================================
--- process.c	(revision 51272)
+++ process.c	(revision 51273)
@@ -887,7 +887,8 @@ rb_waitpid(rb_pid_t pid, int *st, int fl https://github.com/ruby/ruby/blob/trunk/process.c#L887
 							 RUBY_UBF_PROCESS, 0);
     if (result < 0) {
 	if (errno == EINTR) {
-            RUBY_VM_CHECK_INTS(GET_THREAD());
+            rb_thread_t *th = GET_THREAD();
+            RUBY_VM_CHECK_INTS(th);
             goto retry;
         }
 	return (rb_pid_t)-1;

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

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