From e9ebc1c8dbf22b8fdb8aa552d6baaf4545e3842c Mon Sep 17 00:00:00 2001 From: knu Date: Mon, 26 Feb 2007 19:03:21 +0000 Subject: [PATCH] * ext/thread/thread.c (wait_list_cleanup, rb_mutex_try_lock): Eliminate rb_thread_critical switching where unnecessary; implied by shugo in [ruby-dev:30412]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@11896 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ ext/thread/thread.c | 16 ++++------------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index bd4a043e63..3ee8d79ed9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ Tue Feb 27 03:40:09 2007 Akinori MUSHA + * ext/thread/thread.c (wait_list_cleanup, rb_mutex_try_lock): + Eliminate rb_thread_critical switching where unnecessary; + implied by shugo in [ruby-dev:30412]. + * ext/thread/thread.c (set_critical): Merge in thread_exclusive_ensure(). diff --git a/ext/thread/thread.c b/ext/thread/thread.c index c9423bd306..354e1445e7 100644 --- a/ext/thread/thread.c +++ b/ext/thread/thread.c @@ -247,9 +247,7 @@ static VALUE wait_list_cleanup(List *list) { /* cleanup in case of spurious wakeups */ - rb_thread_critical = 1; remove_one(list, rb_thread_current()); - rb_thread_critical = 0; return Qnil; } @@ -374,20 +372,14 @@ static VALUE rb_mutex_try_lock(VALUE self) { Mutex *mutex; - VALUE result; Data_Get_Struct(self, Mutex, mutex); - result = Qfalse; + if (RTEST(mutex->owner)) + return Qfalse; - rb_thread_critical = 1; - if (!RTEST(mutex->owner)) { - mutex->owner = rb_thread_current(); - result = Qtrue; - } - rb_thread_critical = 0; - - return result; + mutex->owner = rb_thread_current(); + return Qtrue; } /*