summaryrefslogtreecommitdiff
path: root/libjava/posix-threads.cc
diff options
context:
space:
mode:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2000-09-30 10:01:04 +0000
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2000-09-30 10:01:04 +0000
commitfc9f1843c0e09a8e24a2701f57a048848f0e99b4 (patch)
treea4e2c3a6e8a2856a0ce7f78966263082bf760310 /libjava/posix-threads.cc
parent2629d8057817e7327f63d151692a5562895df341 (diff)
downloadgcc-fc9f1843c0e09a8e24a2701f57a048848f0e99b4.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36680 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/posix-threads.cc')
-rw-r--r--libjava/posix-threads.cc24
1 files changed, 12 insertions, 12 deletions
diff --git a/libjava/posix-threads.cc b/libjava/posix-threads.cc
index e5a1668dac8..2c7babb97a0 100644
--- a/libjava/posix-threads.cc
+++ b/libjava/posix-threads.cc
@@ -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);