diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-01-13 09:29:13 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-01-13 09:29:13 +0000 |
commit | 6b1bae96414470aba86b8ba7a5822d7d634da8d9 (patch) | |
tree | 269e97cf901bc8743662722784544fbc884320f0 | |
parent | 80323714621e71c2e379a6c20db310f584ddb72e (diff) | |
download | ruby-6b1bae96414470aba86b8ba7a5822d7d634da8d9.tar.gz |
* thread.c (rb_mutex_unlock_th): simplified.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | thread.c | 19 |
2 files changed, 7 insertions, 16 deletions
@@ -1,4 +1,6 @@ -Fri Jan 13 18:25:49 2012 Nobuyoshi Nakada <nobu@ruby-lang.org> +Fri Jan 13 18:29:06 2012 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * thread.c (rb_mutex_unlock_th): simplified. * thread.c (rb_barrier_waiting): fix potential overflows. @@ -3523,7 +3523,6 @@ static const char * rb_mutex_unlock_th(rb_mutex_t *mutex, rb_thread_t volatile *th) { const char *err = NULL; - rb_mutex_t *th_mutex; native_mutex_lock(&mutex->lock); @@ -3542,21 +3541,11 @@ rb_mutex_unlock_th(rb_mutex_t *mutex, rb_thread_t volatile *th) native_mutex_unlock(&mutex->lock); if (!err) { - th_mutex = th->keeping_mutexes; - if (th_mutex == mutex) { - th->keeping_mutexes = mutex->next_mutex; - } - else { - while (1) { - rb_mutex_t *tmp_mutex; - tmp_mutex = th_mutex->next_mutex; - if (tmp_mutex == mutex) { - th_mutex->next_mutex = tmp_mutex->next_mutex; - break; - } - th_mutex = tmp_mutex; - } + rb_mutex_t *volatile *th_mutex = &th->keeping_mutexes; + while (*th_mutex != mutex) { + th_mutex = &(*th_mutex)->next_mutex; } + *th_mutex = mutex->next_mutex; mutex->next_mutex = NULL; } |