From fa319c5774ff479e0961f0710aff206f52231f86 Mon Sep 17 00:00:00 2001 From: kosaki Date: Sat, 7 May 2011 06:20:39 +0000 Subject: fix incorrect native_cond_signal call when deadlock was detected. * thread.c (lock_func): timedwait don't touch cond_waiting and cond_notifid variables. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31460 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- thread.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'thread.c') diff --git a/thread.c b/thread.c index 0bdc4ef6bf..0e34d480aa 100644 --- a/thread.c +++ b/thread.c @@ -3423,7 +3423,6 @@ lock_func(rb_thread_t *th, mutex_t *mutex, int timeout_ms) break; } - mutex->cond_waiting++; if (timeout_ms) { int ret; struct timespec timeout_rel; @@ -3439,9 +3438,10 @@ lock_func(rb_thread_t *th, mutex_t *mutex, int timeout_ms) } } else { + mutex->cond_waiting++; native_cond_wait(&mutex->cond, &mutex->lock); + mutex->cond_notified--; } - mutex->cond_notified--; if (RUBY_VM_INTERRUPTED(th)) { interrupted = 1; -- cgit v1.2.3