[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]