ruby-changes:4440
From: ko1@a...
Date: Wed, 9 Apr 2008 14:43:44 +0900 (JST)
Subject: [ruby-changes:4440] nobu - Ruby:r15931 (trunk): * thread.c (lock_func): optimized and checks for interrupt_flag.
nobu 2008-04-09 14:43:29 +0900 (Wed, 09 Apr 2008) New Revision: 15931 Modified files: trunk/ChangeLog trunk/thread.c Log: * thread.c (lock_func): optimized and checks for interrupt_flag. based on a patch from Sylvain Joyeux in [ruby-Patches-19361] and [ruby-Patches-19362]. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15931&r2=15930&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/thread.c?r1=15931&r2=15930&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 15930) +++ ChangeLog (revision 15931) @@ -1,3 +1,9 @@ +Wed Apr 9 14:43:26 2008 Nobuyoshi Nakada <nobu@r...> + + * thread.c (lock_func): optimized and checks for interrupt_flag. + based on a patch from Sylvain Joyeux in [ruby-Patches-19361] and + [ruby-Patches-19362]. + Wed Apr 9 12:12:01 2008 Nobuyoshi Nakada <nobu@r...> * test/ruby/test_thread.rb: new tests from Sylvain Joyeux in @@ -3,9 +9,6 @@ [ruby-Patches-19361]. -Tue Apr 8 21:38:55 2008 Nobuyoshi Nakada <nobu@r...> +Tue Apr 8 21:36:40 2008 Nobuyoshi Nakada <nobu@r...> - * thread.c (lock_func): optimized. based on a patch from Sylvain - Joyeux in [ruby-Patches-19362]. - * thread.c (rb_mutex_sleep): ensures to re-acquire at waking up. [ruby-Patches-19361] Index: thread.c =================================================================== --- thread.c (revision 15930) +++ thread.c (revision 15931) @@ -2320,30 +2320,19 @@ static VALUE lock_func(rb_thread_t *th, mutex_t *mutex) { - int locked = 0; + native_mutex_lock(&mutex->lock); + while (mutex->th) { + mutex->cond_waiting++; + native_cond_wait(&mutex->cond, &mutex->lock); - while (locked == 0) { - native_mutex_lock(&mutex->lock); - { - if (mutex->th == 0) { - mutex->th = th; - locked = 1; - } - else { - mutex->cond_waiting++; - native_cond_wait(&mutex->cond, &mutex->lock); - - if (th->interrupt_flag) { - locked = 1; - } - else if (mutex->th == 0) { - mutex->th = th; - locked = 1; - } - } + if (th->interrupt_flag) { + native_mutex_unlock(&mutex->lock); + RUBY_VM_CHECK_INTS(); + native_mutex_lock(&mutex->lock); } - native_mutex_unlock(&mutex->lock); } + mutex->th = th; + native_mutex_unlock(&mutex->lock); return Qnil; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/