ruby-changes:19424
From: kosaki <ko1@a...>
Date: Sat, 7 May 2011 22:22:21 +0900 (JST)
Subject: [ruby-changes:19424] Ruby:r31464 (trunk): r31460 is wrong fix. fix it again.
kosaki 2011-05-07 22:22:12 +0900 (Sat, 07 May 2011) New Revision: 31464 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31464 Log: r31460 is wrong fix. fix it again. Modified files: trunk/ChangeLog trunk/thread.c Index: ChangeLog =================================================================== --- ChangeLog (revision 31463) +++ ChangeLog (revision 31464) @@ -1,3 +1,8 @@ +Sat May 7 15:18:06 2011 KOSAKI Motohiro <kosaki.motohiro@g...> + fix incorrect native_cond_signal call when deadlock was detected. + + * thread.c (lock_func): decrement cond_waiting if timeout was happen. + Sat May 7 18:28:37 2011 Nobuyoshi Nakada <nobu@r...> * thread_pthread.c (USE_MONOTONIC_COND): check the availability @@ -5,12 +10,6 @@ * thread_pthread.h (rb_thread_cond_t): ditto. -Sat May 7 15:18:06 2011 KOSAKI Motohiro <kosaki.motohiro@g...> - fix incorrect native_cond_signal call when deadlock was detected. - - * thread.c (lock_func): timedwait don't touch cond_waiting and - cond_notified variables. - Sat May 7 15:15:10 2011 KOSAKI Motohiro <kosaki.motohiro@g...> fix win32 native_cond_timedwait() makes SIGSEGV. Index: thread.c =================================================================== --- thread.c (revision 31463) +++ thread.c (revision 31464) @@ -3423,6 +3423,7 @@ break; } + mutex->cond_waiting++; if (timeout_ms) { int ret; struct timespec timeout_rel; @@ -3434,14 +3435,14 @@ ret = native_cond_timedwait(&mutex->cond, &mutex->lock, &timeout); if (ret == ETIMEDOUT) { interrupted = 2; + mutex->cond_waiting--; break; } } else { - mutex->cond_waiting++; native_cond_wait(&mutex->cond, &mutex->lock); - mutex->cond_notified--; } + mutex->cond_notified--; if (RUBY_VM_INTERRUPTED(th)) { interrupted = 1; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/