natFinalizerThread.cc: New file.
* gnu/gcj/runtime/natFinalizerThread.cc: New file. * java/lang/natRuntime.cc: Include FinalizerThread.h. (runFinalization): Call finalizerReady. * nogc.cc (_Jv_GCInitializeFinalizers): New function. * prims.cc: Include VirtualMachineError.h, FinalizerThread.h. (_Jv_CreateJavaVM): Start the finalizer thread. * no-threads.cc: Include InternalError.h. (_Jv_ThreadStart): Throw InternalError. (_Jv_ThreadInitData): Don't throw error if this is not the first thread. * Makefile.in: Rebuilt. * Makefile.am (ordinary_java_source_files): Added FinalizerThread.java. (nat_source_files): Added natFinalizerThread.cc. * include/jvm.h (_Jv_GCInitializeFinalizers): Declare. * boehm.cc (_Jv_GCInitializeFinalizers): New function. * gnu/gcj/runtime/FirstThread.java (run): Start finalizer thread. * gnu/gcj/runtime/FinalizerThread.java: New file. From-SVN: r46163
This commit is contained in:
+18
-1
@@ -53,7 +53,6 @@ details. */
|
||||
#include <java/lang/String.h>
|
||||
#include <java/lang/Thread.h>
|
||||
#include <java/lang/ThreadGroup.h>
|
||||
#include <gnu/gcj/runtime/FirstThread.h>
|
||||
#include <java/lang/ArrayIndexOutOfBoundsException.h>
|
||||
#include <java/lang/ArithmeticException.h>
|
||||
#include <java/lang/ClassFormatError.h>
|
||||
@@ -64,7 +63,10 @@ details. */
|
||||
#include <java/lang/reflect/Modifier.h>
|
||||
#include <java/io/PrintStream.h>
|
||||
#include <java/lang/UnsatisfiedLinkError.h>
|
||||
#include <java/lang/VirtualMachineError.h>
|
||||
#include <gnu/gcj/runtime/VMClassLoader.h>
|
||||
#include <gnu/gcj/runtime/FinalizerThread.h>
|
||||
#include <gnu/gcj/runtime/FirstThread.h>
|
||||
|
||||
#ifdef USE_LTDL
|
||||
#include <ltdl.h>
|
||||
@@ -894,6 +896,21 @@ _Jv_CreateJavaVM (void* /*vm_args*/)
|
||||
|
||||
_Jv_JNI_Init ();
|
||||
|
||||
_Jv_GCInitializeFinalizers (&::gnu::gcj::runtime::FinalizerThread::finalizerReady);
|
||||
|
||||
// Start the GC finalizer thread. A VirtualMachineError can be
|
||||
// thrown by the runtime if, say, threads aren't available. In this
|
||||
// case finalizers simply won't run.
|
||||
try
|
||||
{
|
||||
using namespace gnu::gcj::runtime;
|
||||
FinalizerThread *ft = new FinalizerThread ();
|
||||
ft->start ();
|
||||
}
|
||||
catch (java::lang::VirtualMachineError *ignore)
|
||||
{
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user