posix-threads.cc (_Jv_CondWait): Check to see if we are interrupted before modifying...
authorTom Tromey <tromey@cygnus.com>
Sat, 30 Sep 2000 10:01:04 +0000 (10:01 +0000)
committerBryce McKinlay <bryce@gcc.gnu.org>
Sat, 30 Sep 2000 10:01:04 +0000 (11:01 +0100)
2000-09-30  Tom Tromey  <tromey@cygnus.com>

        * posix-threads.cc (_Jv_CondWait): Check to see if we are
        interrupted before modifying the cv's wait set.

From-SVN: r36680

libjava/ChangeLog
libjava/posix-threads.cc

index 543d04b58836b888fe9895ac33a150f5ac76d905..6a7e6bf457183496afbe71e7f1f368e23b749267 100644 (file)
@@ -1,3 +1,8 @@
+2000-09-30  Tom Tromey  <tromey@cygnus.com>
+
+        * posix-threads.cc (_Jv_CondWait): Check to see if we are
+        interrupted before modifying the cv's wait set.
+       
 2000-09-30  Hans Boehm  <boehm@acm.org>
            Bryce McKinlay  <bryce@albatross.co.nz>
            
index e5a1668dac8579bc714ba79f11e2543c383d749d..2c7babb97a084ffcf2181a27277b5194a4dcb6c3 100644 (file)
@@ -1,6 +1,6 @@
 // posix-threads.cc - interface between libjava and POSIX threads.
 
-/* Copyright (C) 1998, 1999  Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -104,6 +104,16 @@ _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu,
   _Jv_Thread_t *current = _Jv_ThreadCurrentData ();
   java::lang::Thread *current_obj = _Jv_ThreadCurrent ();
 
+  pthread_mutex_lock (&current->wait_mutex);
+
+  // Now that we hold the wait mutex, check if this thread has been 
+  // interrupted already.
+  if (current_obj->interrupt_flag)
+    {
+      pthread_mutex_unlock (&current->wait_mutex);
+      return _JV_INTERRUPTED;
+    }
+
   // Add this thread to the cv's wait set.
   current->next = NULL;
 
@@ -119,16 +129,6 @@ _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu,
           }
       }
 
-  pthread_mutex_lock (&current->wait_mutex);
-  
-  // Now that we hold the wait mutex, check if this thread has been 
-  // interrupted already.
-  if (current_obj->interrupt_flag)
-    {
-      pthread_mutex_unlock (&current->wait_mutex);
-      return _JV_INTERRUPTED;
-    }
-
   // Record the current lock depth, so it can be restored when we re-aquire it.
   int count = mu->count;
 
@@ -154,7 +154,7 @@ _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu,
         done_sleeping = true;
     }
   
-  // Check for an interrupt *before* unlocking the wait mutex.
+  // Check for an interrupt *before* releasing the wait mutex.
   jboolean interrupted = current_obj->interrupt_flag;
   
   pthread_mutex_unlock (&current->wait_mutex);