mirror of git://gcc.gnu.org/git/gcc.git
posix-threads.cc (_Jv_CondWait): Call _Jv_PthreadCheckMonitor.
* posix-threads.cc (_Jv_CondWait): Call _Jv_PthreadCheckMonitor. * include/posix-threads.h (_Jv_PthreadCheckMonitor): New function. (_Jv_CondNotify): Use it. (_Jv_CondNotifyAll): Likewise. * java/lang/Class.h (JV_STATE_NOTHING): Correct misspelling. From-SVN: r29030
This commit is contained in:
parent
b1133adfca
commit
6e87747b6d
|
@ -1,3 +1,13 @@
|
|||
1999-09-01 Tom Tromey <tromey@cygnus.com>
|
||||
|
||||
* posix-threads.cc (_Jv_CondWait): Call _Jv_PthreadCheckMonitor.
|
||||
* include/posix-threads.h (_Jv_PthreadCheckMonitor): New
|
||||
function.
|
||||
(_Jv_CondNotify): Use it.
|
||||
(_Jv_CondNotifyAll): Likewise.
|
||||
|
||||
* java/lang/Class.h (JV_STATE_NOTHING): Correct misspelling.
|
||||
|
||||
1999-08-31 Tom Tromey <tromey@cygnus.com>
|
||||
|
||||
* include/jvm.h (_Jv_makeUtf8TypeConst): Removed unused
|
||||
|
|
|
@ -65,6 +65,25 @@ typedef struct
|
|||
typedef void _Jv_ThreadStartFunc (java::lang::Thread *);
|
||||
|
||||
|
||||
// This is a convenience function used only by the pthreads thread
|
||||
// implementation. This is slow, but that's too bad -- we need to do
|
||||
// the checks for correctness. It might be nice to be able to compile
|
||||
// this out.
|
||||
inline int _Jv_PthreadCheckMonitor (_Jv_Mutex_t *mu)
|
||||
{
|
||||
pthread_mutex_t *pmu;
|
||||
#ifdef HAVE_RECURSIVE_MUTEX
|
||||
pmu = mu;
|
||||
#else
|
||||
pmu = &mu->mutex2;
|
||||
#endif
|
||||
// See if the mutex is locked by this thread.
|
||||
if (pthread_mutex_trylock (pmu))
|
||||
return 1;
|
||||
pthread_mutex_unlock (pmu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
// Condition variables.
|
||||
//
|
||||
|
@ -94,17 +113,15 @@ int _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu,
|
|||
jlong millis, jint nanos);
|
||||
|
||||
inline int
|
||||
_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *)
|
||||
_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu)
|
||||
{
|
||||
// FIXME: check to see if mutex is held by current thread.
|
||||
return pthread_cond_signal (cv);
|
||||
return _Jv_PthreadCheckMonitor (mu) || pthread_cond_signal (cv);
|
||||
}
|
||||
|
||||
inline int
|
||||
_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *)
|
||||
_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu)
|
||||
{
|
||||
// FIXME: check to see if mutex is held by current thread.
|
||||
return pthread_cond_broadcast (cv);
|
||||
return _Jv_PthreadCheckMonitor (mu) || pthread_cond_broadcast (cv);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ extern "C" void _Jv_RegisterClasses (jclass *classes);
|
|||
// `resolved' must come between `nothing' and the other states.
|
||||
// Whenever the state changes, one should notify all waiters of this
|
||||
// class.
|
||||
#define JV_STATE_NOTING 0 // set by compiler
|
||||
#define JV_STATE_NOTHING 0 // set by compiler
|
||||
|
||||
#define JV_STATE_PRELOADING 1 // can do _Jv_FindClass
|
||||
#define JV_STATE_LOADING 3 // has super installed
|
||||
|
|
|
@ -405,7 +405,7 @@ _Jv_RegisterClasses (jclass *classes)
|
|||
|
||||
// registering a compiled class causes
|
||||
// it to be immediately "prepared".
|
||||
if (klass->state == JV_STATE_NOTING)
|
||||
if (klass->state == JV_STATE_NOTHING)
|
||||
klass->state = JV_STATE_COMPILED;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,6 +75,9 @@ int
|
|||
_Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu,
|
||||
jlong millis, jint nanos)
|
||||
{
|
||||
if (_Jv_PthreadCheckMonitor (mu))
|
||||
return 1;
|
||||
|
||||
int r;
|
||||
pthread_mutex_t *pmu;
|
||||
#ifdef HAVE_RECURSIVE_MUTEX
|
||||
|
@ -82,6 +85,7 @@ _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu,
|
|||
#else
|
||||
pmu = &mu->mutex2;
|
||||
#endif
|
||||
|
||||
if (millis == 0 && nanos == 0)
|
||||
r = pthread_cond_wait (cv, pmu);
|
||||
else
|
||||
|
@ -96,6 +100,7 @@ _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu,
|
|||
if (r && errno == ETIMEDOUT)
|
||||
r = 0;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue