diff options
author | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-09-30 10:01:04 +0000 |
---|---|---|
committer | bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-09-30 10:01:04 +0000 |
commit | fc9f1843c0e09a8e24a2701f57a048848f0e99b4 (patch) | |
tree | a4e2c3a6e8a2856a0ce7f78966263082bf760310 /libjava/posix-threads.cc | |
parent | 2629d8057817e7327f63d151692a5562895df341 (diff) | |
download | gcc-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.cc | 24 |
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 (¤t->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 (¤t->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 (¤t->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 (¤t->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 (¤t->wait_mutex); |