diff options
author | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-07 06:20:39 +0000 |
---|---|---|
committer | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-07 06:20:39 +0000 |
commit | fa319c5774ff479e0961f0710aff206f52231f86 (patch) | |
tree | 7483776388bb7ae6d9ba4b27024880d29ddfa775 | |
parent | 94e4d61bdaad74e0f31bb6d69521784303a0cb5e (diff) | |
download | ruby-fa319c5774ff479e0961f0710aff206f52231f86.tar.gz |
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
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | thread.c | 4 |
2 files changed, 8 insertions, 2 deletions
@@ -1,3 +1,9 @@ +Sat May 7 15:18:06 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com> + fix incorrect native_cond_signal call when deadlock was detected. + + * thread.c (lock_func): timedwait don't touch cond_waiting and + cond_notifid variables. + Sat May 7 15:15:10 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com> fix win32 native_cond_timedwait() makes SIGSEGV. @@ -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; |