Commit 304daac5 by Tom Tromey Committed by Bryce McKinlay

posix-threads.cc (_Jv_CondWait): Check to see if we are interrupted before…

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

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
parent bf3b8e42
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>
......
// 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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment