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/