natFinalizerThread.cc [plain text]
#include <config.h>
#include <gcj/cni.h>
#include <jvm.h>
#include <gnu/gcj/runtime/FinalizerThread.h>
#include <java-threads.h>
static _Jv_Mutex_t mutex;
static _Jv_ConditionVariable_t condition;
void
gnu::gcj::runtime::FinalizerThread::init ()
{
_Jv_MutexInit (&mutex);
_Jv_CondInit (&condition);
}
void
gnu::gcj::runtime::FinalizerThread::finalizerReady ()
{
#ifdef __JV_NO_THREADS__
_Jv_RunFinalizers ();
#else
_Jv_MutexLock (&mutex);
finalizer_ready = true;
_Jv_CondNotify (&condition, &mutex);
_Jv_MutexUnlock (&mutex);
#endif
}
void
gnu::gcj::runtime::FinalizerThread::run ()
{
while (true)
{
_Jv_MutexLock (&mutex);
if (! finalizer_ready)
_Jv_CondWait (&condition, &mutex, 0, 0);
finalizer_ready = false;
_Jv_MutexUnlock (&mutex);
_Jv_RunFinalizers ();
}
}