OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [gnu/] [gcj/] [runtime/] [natFinalizerThread.cc] - Rev 756

Compare with Previous | Blame | View Log

// natFinalizerThread.cc - Implementation of FinalizerThread native methods.
 
/* Copyright (C) 2001, 2004  Free Software Foundation
 
   This file is part of libgcj.
 
This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */
 
#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;
 
// Initialize lock & condition variable.
void
gnu::gcj::runtime::FinalizerThread::init ()
{
  _Jv_MutexInit (&mutex);
  _Jv_CondInit (&condition);
}
 
// This is called by the GC when a finalizer is ready to be
// run.  It sets a flag and wakes up the finalizer thread. Note
// that this MUST NOT aquire any Java lock, as this could result in 
// the hash synchronization code being re-entered: the synchronization
// code itself might need to allocate. See PR 16478.
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
}
 
// Main loop for the finalizer thread. 
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 ();
    }
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.