From 03f8a9024028ba3b1d8684a9c3c691eb7b8624a0 Mon Sep 17 00:00:00 2001 From: Pavel Afremov Date: Fri, 12 Jan 2007 18:42:26 +0300 Subject: [PATCH] Finalization native turn off flag support. Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Finalization turn off flag was changed from –Dvm.finalize=off to –XDvm.finalize=off. Patch contains changes to support new flag. --- vm/vmcore/include/finalize.h | 1 + vm/vmcore/src/init/finalize.cpp | 7 ++++++- .../javasrc/java/lang/FinalizerThread.java | 15 ++++++++++----- .../native/java_lang_FinalizerThread.cpp | 10 ++++++++++ .../native/java_lang_FinalizerThread.h | 5 +++++ 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/vm/vmcore/include/finalize.h b/vm/vmcore/include/finalize.h index 380658e..4ecf6c7 100644 --- a/vm/vmcore/include/finalize.h +++ b/vm/vmcore/include/finalize.h @@ -41,6 +41,7 @@ #endif void vm_run_pending_finalizers(); int vm_do_finalization(int quantity); int vm_get_finalizable_objects_quantity(); +bool vm_finalization_is_enabled(); #ifndef USE_GC_STATIC VMEXPORT diff --git a/vm/vmcore/src/init/finalize.cpp b/vm/vmcore/src/init/finalize.cpp index 0b8a138..a068852 100644 --- a/vm/vmcore/src/init/finalize.cpp +++ b/vm/vmcore/src/init/finalize.cpp @@ -526,7 +526,12 @@ int vm_get_finalizable_objects_quantity( { return objects_to_finalize.getLength(); } -// -- Code to deal with Reference Queues that need to be notified. + +/* returns true if finalization system is turned on, and false otherwise */ +bool vm_finalization_is_enabled() +{ + return VM_Global_State::loader_env->finalizer_thread != NULL; +}// -- Code to deal with Reference Queues that need to be notified. static References_To_Enqueue references_to_enqueue; diff --git a/vm/vmcore/src/kernel_classes/javasrc/java/lang/FinalizerThread.java b/vm/vmcore/src/kernel_classes/javasrc/java/lang/FinalizerThread.java index b14150e..630c69e 100644 --- a/vm/vmcore/src/kernel_classes/javasrc/java/lang/FinalizerThread.java +++ b/vm/vmcore/src/kernel_classes/javasrc/java/lang/FinalizerThread.java @@ -78,10 +78,9 @@ class FinalizerThread extends Thread { String p = System.getProperty("vm.finalize"); processorsQuantity = getProcessorsQuantity(); - - // -Dvm.finalize=0 disables the finalizer thread - if ("0".equalsIgnoreCase(p) || "off".equalsIgnoreCase(p) - || "no".equalsIgnoreCase(p) || "false".equalsIgnoreCase(p)) { + + // -XDvm.finalize=0 disables the finalizer thread + if (! isNativePartEnabled()) { warn("finalizer thread have not been created"); } else { (new FinalizerThread(true)).start(); @@ -198,7 +197,13 @@ class FinalizerThread extends Thread { private static native int doFinalization(int quantity); private static native void fillFinalizationQueueOnExit(); - + + /** + * Returns true if native part of finalization system is + * turned on, and false otherwise. + */ + private static native boolean isNativePartEnabled(); + /** * Returns true if current thread is finalizer thread */ diff --git a/vm/vmcore/src/kernel_classes/native/java_lang_FinalizerThread.cpp b/vm/vmcore/src/kernel_classes/native/java_lang_FinalizerThread.cpp index 0c47fac..01a01e5 100644 --- a/vm/vmcore/src/kernel_classes/native/java_lang_FinalizerThread.cpp +++ b/vm/vmcore/src/kernel_classes/native/java_lang_FinalizerThread.cpp @@ -130,4 +130,14 @@ JNIEXPORT void JNICALL Java_java_lang_Fi { finalizer_shutdown(value); } +/* + * Class: java_lang_FinalizerThread + * Method: isNativePartEnabled + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL Java_java_lang_FinalizerThread_isNativePartEnabled + (JNIEnv *, jclass) +{ + return (jboolean) vm_finalization_is_enabled(); +} /* END: These three methods are added for NATIVE FINALIZER THREAD */ diff --git a/vm/vmcore/src/kernel_classes/native/java_lang_FinalizerThread.h b/vm/vmcore/src/kernel_classes/native/java_lang_FinalizerThread.h index 6e1f636..98f1bc0 100644 --- a/vm/vmcore/src/kernel_classes/native/java_lang_FinalizerThread.h +++ b/vm/vmcore/src/kernel_classes/native/java_lang_FinalizerThread.h @@ -102,6 +102,11 @@ Java_java_lang_FinalizerThread_finalizer /* END: These three methods are added for NATIVE FINALIZER THREAD */ +/* + * Method: java_lang_FinalizerThread.isNativePartEnabled()Z + */ +JNIEXPORT jboolean JNICALL +Java_java_lang_FinalizerThread_isNativePartEnabled(JNIEnv *, jclass); #ifdef __cplusplus } #endif -- 1.4.1