# HG changeset patch # User jcbeyler # Date 1542816918 28800 # Wed Nov 21 08:15:18 2018 -0800 # Node ID 0a2dcd2734becb184f4cecf9f264588f0bdf36e5 # Parent b0af758a092cdf44ebc275c28e4737fc769a3a9f 8213501: Deploy ExceptionJniWrapper for a few tests Summary: Reviewed-by: diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002/attach002Agent00.cpp b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002/attach002Agent00.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002/attach002Agent00.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002/attach002Agent00.cpp @@ -27,6 +27,7 @@ #include #include #include +#include "ExceptionCheckingJniEnv.hpp" extern "C" { @@ -67,23 +68,15 @@ #define ATTACH002_TARGET_APP_CLASS_NAME "nsk/jvmti/AttachOnDemand/attach002/attach002Target" -int registerNativeMethods(JNIEnv* jni) { +void registerNativeMethods(JNIEnv* jni_env) { + ExceptionCheckingJniEnvPtr jni(jni_env); jclass appClass; JNINativeMethod nativeMethods[] = { {(char*) "agentGotCapabilities", (char*) "()Z", (void*) Java_nsk_jvmti_AttachOnDemand_attach002_attach002Target_agentGotCapabilities}}; jint nativeMethodsNumber = 1; - appClass = jni->FindClass(ATTACH002_TARGET_APP_CLASS_NAME); - if (!NSK_JNI_VERIFY(jni, appClass != NULL)) { - return NSK_FALSE; - } - - if (!NSK_JNI_VERIFY(jni, - (jni->RegisterNatives(appClass, nativeMethods, nativeMethodsNumber) == 0))) { - return NSK_FALSE; - } - - return NSK_TRUE; + appClass = jni->FindClass(ATTACH002_TARGET_APP_CLASS_NAME, TRACE_JNI_CALL); + jni->RegisterNatives(appClass, nativeMethods, nativeMethodsNumber, TRACE_JNI_CALL); } void JNICALL classLoadHandler( @@ -201,9 +194,7 @@ if (!NSK_VERIFY(jvmti != NULL)) return JNI_ERR; - if (!NSK_VERIFY(registerNativeMethods(jni))) { - return JNI_ERR; - } + registerNativeMethods(jni); memset(&caps, 0, sizeof(caps)); caps.can_generate_all_class_hook_events = 1; diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002/libattach002Agent00.cpp b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002/libattach002Agent00.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002/libattach002Agent00.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach002/libattach002Agent00.cpp @@ -21,6 +21,7 @@ * questions. */ +#include "ExceptionCheckingJniEnv.cpp" #include "native_thread.cpp" #include "nsk_tools.cpp" #include "jni_tools.cpp" diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach021/attach021Agent00.cpp b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach021/attach021Agent00.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach021/attach021Agent00.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach021/attach021Agent00.cpp @@ -27,6 +27,7 @@ #include #include #include +#include "ExceptionCheckingJniEnv.hpp" extern "C" { @@ -87,24 +88,16 @@ */ } -int registerNativeMethods(JNIEnv* jni) { +void registerNativeMethods(JNIEnv* jni_env) { + ExceptionCheckingJniEnvPtr jni(jni_env); jclass appClass; JNINativeMethod nativeMethods[] = { {(char*) "setTagFor", (char*) "(Ljava/lang/Object;)Z", (void*) Java_nsk_jvmti_AttachOnDemand_attach021_attach021Target_setTagFor}, {(char*) "shutdownAgent", (char*) "()V", (void*) Java_nsk_jvmti_AttachOnDemand_attach021_attach021Target_shutdownAgent}}; jint nativeMethodsNumber = 2; - appClass = jni->FindClass(ATTACH021_TARGET_APP_CLASS_NAME); - if (!NSK_JNI_VERIFY(jni, appClass != NULL)) { - return NSK_FALSE; - } - - if (!NSK_JNI_VERIFY(jni, - (jni->RegisterNatives(appClass, nativeMethods, nativeMethodsNumber) == 0))) { - return NSK_FALSE; - } - - return NSK_TRUE; + appClass = jni->FindClass(ATTACH021_TARGET_APP_CLASS_NAME, TRACE_JNI_CALL); + jni->RegisterNatives(appClass, nativeMethods, nativeMethodsNumber, TRACE_JNI_CALL); } #ifdef STATIC_BUILD @@ -138,9 +131,7 @@ if (!NSK_VERIFY(jvmti != NULL)) return JNI_ERR; - if (!NSK_VERIFY(registerNativeMethods(jni))) { - return JNI_ERR; - } + registerNativeMethods(jni); memset(&caps, 0, sizeof(caps)); caps.can_tag_objects = 1; diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach021/libattach021Agent00.cpp b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach021/libattach021Agent00.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach021/libattach021Agent00.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach021/libattach021Agent00.cpp @@ -21,6 +21,7 @@ * questions. */ +#include "ExceptionCheckingJniEnv.cpp" #include "native_thread.cpp" #include "nsk_tools.cpp" #include "jni_tools.cpp" diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach022/attach022Agent00.cpp b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach022/attach022Agent00.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach022/attach022Agent00.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach022/attach022Agent00.cpp @@ -27,6 +27,7 @@ #include #include #include +#include "ExceptionCheckingJniEnv.hpp" extern "C" { @@ -64,7 +65,6 @@ JNIEXPORT jboolean JNICALL Java_nsk_jvmti_AttachOnDemand_attach022_attach022Target_shutdownAgent(JNIEnv * jni, jclass klass, jint expectedTaggedObjectsCounter) { - if (taggedObjectsCounter != expectedTaggedObjectsCounter) { success = 0; NSK_COMPLAIN2("ERROR: unexpected taggedObjectsCounter: %d (expected value is %d)\n", taggedObjectsCounter, expectedTaggedObjectsCounter); @@ -97,24 +97,16 @@ #define ATTACH022_TARGET_APP_CLASS_NAME "nsk/jvmti/AttachOnDemand/attach022/attach022Target" -int registerNativeMethods(JNIEnv* jni) { +void registerNativeMethods(JNIEnv* jni_env) { + ExceptionCheckingJniEnvPtr jni(jni_env); jclass appClass; JNINativeMethod nativeMethods[] = { {(char*)"shutdownAgent", (char*)"(I)Z", (void*) Java_nsk_jvmti_AttachOnDemand_attach022_attach022Target_shutdownAgent}}; jint nativeMethodsNumber = 1; - appClass = jni->FindClass(ATTACH022_TARGET_APP_CLASS_NAME); - if (!NSK_JNI_VERIFY(jni, appClass != NULL)) { - return NSK_FALSE; - } - - if (!NSK_JNI_VERIFY(jni, - (jni->RegisterNatives(appClass, nativeMethods, nativeMethodsNumber) == 0))) { - return NSK_FALSE; - } - - return NSK_TRUE; + appClass = jni->FindClass(ATTACH022_TARGET_APP_CLASS_NAME, TRACE_JNI_CALL); + jni->RegisterNatives(appClass, nativeMethods, nativeMethodsNumber, TRACE_JNI_CALL); } void JNICALL vmObjectAllocHandler(jvmtiEnv * jvmti, @@ -190,9 +182,7 @@ if (!NSK_VERIFY(jvmti != NULL)) return JNI_ERR; - if (!NSK_VERIFY(registerNativeMethods(jni))) { - return JNI_ERR; - } + registerNativeMethods(jni); if (!NSK_JVMTI_VERIFY(jvmti->CreateRawMonitor("ObjectTagMonitor", &objectTagMonitor))) { return JNI_ERR; diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach022/libattach022Agent00.cpp b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach022/libattach022Agent00.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach022/libattach022Agent00.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach022/libattach022Agent00.cpp @@ -21,6 +21,7 @@ * questions. */ +#include "ExceptionCheckingJniEnv.cpp" #include "native_thread.cpp" #include "nsk_tools.cpp" #include "jni_tools.cpp" diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t003/ap04t003.cpp b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t003/ap04t003.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t003/ap04t003.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t003/ap04t003.cpp @@ -25,7 +25,7 @@ #include #include #include "agent_common.h" - +#include "ExceptionCheckingJniEnv.hpp" #include "nsk_tools.h" #include "jni_tools.h" #include "JVMTITools.h" @@ -305,7 +305,7 @@ /***********************************************************************/ -static int startThread(JNIEnv* jni, jthread threadObj) { +static int startThread(jthread threadObj) { int success = NSK_TRUE; /* enter startLock */ @@ -334,46 +334,27 @@ } /** Create thread object for new agent thread. */ -static jthread newThreadObj(JNIEnv* jni) { +static jthread newThreadObj(JNIEnv* jni_env) { + ExceptionCheckingJniEnvPtr jni(jni_env); jclass thrClass; jmethodID cid; jthread result = NULL; - thrClass = jni->FindClass("java/lang/Thread"); - if (!NSK_JNI_VERIFY(jni, thrClass != NULL)) { - nsk_jvmti_setFailStatus(); - return result; - } - - cid = jni->GetMethodID(thrClass, "", "()V"); - if (!NSK_JNI_VERIFY(jni, cid != NULL)) { - nsk_jvmti_setFailStatus(); - return result; - } - - result = jni->NewObject(thrClass, cid); - if (!NSK_JNI_VERIFY(jni, result != NULL)) { - nsk_jvmti_setFailStatus(); - return result; - } - - return result; + thrClass = jni->FindClass("java/lang/Thread", TRACE_JNI_CALL); + cid = jni->GetMethodID(thrClass, "", "()V", TRACE_JNI_CALL); + return jni->NewObject(thrClass, cid, TRACE_JNI_CALL); } /***********************************************************************/ /** Clean counters and start new agent thread with agent_start() body. */ -static int prepareToIteration (JNIEnv* jni) { +static int prepareToIteration(JNIEnv* jni) { jthread threadObj = NULL; setCounter(&iterationCount, 0); setCounter(&objectCount, 0); threadObj = newThreadObj(jni); - if (!NSK_VERIFY(threadObj != NULL)) { - nsk_jvmti_setFailStatus(); - return NSK_FALSE; - } /* enter endLock */ if (!NSK_JVMTI_VERIFY(jvmti->RawMonitorEnter(endLock))) { @@ -381,11 +362,11 @@ } NSK_DISPLAY0("Starting new agent thread...\n"); - return startThread(jni, threadObj); + return startThread(threadObj); } /** Wait for new agent thread to complete. */ -static void afterIteration (JNIEnv* jni) { +static void afterIteration() { /* notify new agent thread (in case if not yet notified) */ notifyThread(); @@ -433,7 +414,7 @@ } NSK_DISPLAY0("IterateOverHeap finished.\n"); - afterIteration(jni); + afterIteration(); found = getCounter(&objectCount); NSK_DISPLAY1("Found tagged objects: %d\n", found); @@ -464,7 +445,7 @@ } NSK_DISPLAY0("IterateOverReachableObjects finished.\n"); - afterIteration(jni); + afterIteration(); found = getCounter(&objectCount); NSK_DISPLAY1("Found tagged objects: %d\n", found); @@ -495,7 +476,7 @@ } NSK_DISPLAY0("IterateOverInstancesOfClass finished.\n"); - afterIteration(jni); + afterIteration(); found = getCounter(&objectCount); NSK_DISPLAY1("Found tagged objects: %d\n", found); @@ -509,20 +490,16 @@ } JNIEXPORT void JNICALL -Java_nsk_jvmti_scenarios_allocation_AP04_ap04t003_runIterateOverObjectsReachableFromObject(JNIEnv* jni, +Java_nsk_jvmti_scenarios_allocation_AP04_ap04t003_runIterateOverObjectsReachableFromObject(JNIEnv* jni_env, jclass klass) { + ExceptionCheckingJniEnvPtr jni(jni_env); jobject root = NULL; int modified = 0; int found = 0; - root = jni->GetStaticObjectField(debugeeClass, rootFieldID); - if (!NSK_JNI_VERIFY(jni, root != NULL)) { - NSK_COMPLAIN0("GetStaticObjectField returned NULL for 'root' field value\n\n"); - nsk_jvmti_setFailStatus(); - return; - } + root = jni->GetStaticObjectField(debugeeClass, rootFieldID, TRACE_JNI_CALL); - if (!prepareToIteration(jni)) + if (!prepareToIteration(jni_env)) return; NSK_DISPLAY0("Calling IterateOverObjectsReachableFromObject...\n"); @@ -533,7 +510,7 @@ } NSK_DISPLAY0("IterateOverObjectsReachableFromObject finished.\n"); - afterIteration(jni); + afterIteration(); found = getCounter(&objectCount); NSK_DISPLAY1("Found tagged objects: %d\n", found); @@ -547,8 +524,8 @@ } static void JNICALL -agentProc(jvmtiEnv* jvmti, JNIEnv* jni, void* arg) { - +agentProc(jvmtiEnv* jvmti, JNIEnv* jni_env, void* arg) { + ExceptionCheckingJniEnvPtr jni(jni_env); NSK_DISPLAY0("Wait for debugee start\n\n"); if (!NSK_VERIFY(nsk_jvmti_waitForSync(timeout))) return; @@ -560,16 +537,11 @@ return; } - debugeeClass = (jclass) jni->NewGlobalRef(debugeeClass); - if (!NSK_JNI_VERIFY(jni, debugeeClass != NULL)) - return; + debugeeClass = (jclass) jni->NewGlobalRef(debugeeClass, TRACE_JNI_CALL); NSK_DISPLAY1("Find ID of 'root' field: %s\n", ROOT_SIGNATURE); - rootFieldID = jni->GetStaticFieldID(debugeeClass, "root", ROOT_SIGNATURE); - if (!NSK_JNI_VERIFY(jni, rootFieldID != NULL)) { - nsk_jvmti_setFailStatus(); - return; - } + rootFieldID = jni->GetStaticFieldID(debugeeClass, "root", + ROOT_SIGNATURE, TRACE_JNI_CALL); NSK_DISPLAY0("Let debugee to run test cases\n"); if (!NSK_VERIFY(nsk_jvmti_resumeSync())) @@ -579,7 +551,7 @@ if (!NSK_VERIFY(nsk_jvmti_waitForSync(timeout))) return; - NSK_TRACE(jni->DeleteGlobalRef(debugeeClass)); + jni->DeleteGlobalRef(debugeeClass, TRACE_JNI_CALL); NSK_TRACE(jvmti->DestroyRawMonitor(counterMonitor_ptr)); NSK_TRACE(jvmti->DestroyRawMonitor(startLock)); NSK_TRACE(jvmti->DestroyRawMonitor(runLock)); diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t003/libap04t003.cpp b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t003/libap04t003.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t003/libap04t003.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t003/libap04t003.cpp @@ -21,6 +21,7 @@ * questions. */ +#include "ExceptionCheckingJniEnv.cpp" #include "native_thread.cpp" #include "nsk_tools.cpp" #include "jni_tools.cpp" diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI01/bi01t001/bi01t001.cpp b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI01/bi01t001/bi01t001.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI01/bi01t001/bi01t001.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI01/bi01t001/bi01t001.cpp @@ -24,6 +24,7 @@ #include #include "jvmti.h" #include "agent_common.h" +#include "ExceptionCheckingJniEnv.hpp" #include "jni_tools.h" #include "jvmti_tools.h" @@ -46,24 +47,21 @@ * Signature: ([B)Z */ JNIEXPORT jboolean JNICALL -Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t001_setNewByteCode(JNIEnv *jni_env, - jobject o, jbyteArray byteCode) { - +Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t001_setNewByteCode(JNIEnv *jni, + jobject o, + jbyteArray byteCode) { + ExceptionCheckingJniEnvPtr jni_env(jni); jbyte* elements; jboolean isCopy; - newClassSize = jni_env->GetArrayLength(byteCode); - if (!NSK_JNI_VERIFY(jni_env, newClassSize > 0)) { + newClassSize = jni_env->GetArrayLength(byteCode, TRACE_JNI_CALL); + if (newClassSize <= 0) { nsk_jvmti_setFailStatus(); return NSK_FALSE; } NSK_DISPLAY1("\t... got array size: %d\n", newClassSize); - elements = jni_env->GetByteArrayElements(byteCode, &isCopy); - if (!NSK_JNI_VERIFY(jni_env, elements != NULL)) { - nsk_jvmti_setFailStatus(); - return NSK_FALSE; - } + elements = jni_env->GetByteArrayElements(byteCode, &isCopy, TRACE_JNI_CALL); NSK_DISPLAY1("\t... got elements list: 0x%p\n", (void*)elements); if (!NSK_JVMTI_VERIFY(jvmti->Allocate(newClassSize, &newClassBytes))) { @@ -80,7 +78,7 @@ NSK_DISPLAY1("\t... copied bytecode: %d bytes\n", (int)newClassSize); NSK_DISPLAY1("\t... release elements list: 0x%p\n", (void*)elements); - NSK_TRACE(jni_env->ReleaseByteArrayElements(byteCode, elements, JNI_ABORT)); + jni_env->ReleaseByteArrayElements(byteCode, elements, JNI_ABORT, TRACE_JNI_CALL); NSK_DISPLAY0("\t... released\n"); return NSK_TRUE; } @@ -92,13 +90,10 @@ * Signature: (Ljava/lang/Class;)V */ JNIEXPORT void JNICALL -Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t001_setClass(JNIEnv *jni_env, +Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t001_setClass(JNIEnv *jni, jobject o, jclass cls) { - - oldClassDef.klass = (jclass) jni_env->NewGlobalRef(cls); - if (!NSK_JNI_VERIFY(jni_env, oldClassDef.klass != NULL)) { - nsk_jvmti_setFailStatus(); - } + ExceptionCheckingJniEnvPtr jni_env(jni); + oldClassDef.klass = (jclass) jni_env->NewGlobalRef(cls, TRACE_JNI_CALL); } /* ============================================================================= */ @@ -154,6 +149,7 @@ /** Agent algorithm. */ static void JNICALL agentProc(jvmtiEnv* jvmti, JNIEnv* agentJNI, void* arg) { + ExceptionCheckingJniEnvPtr jni(agentJNI); /*Wait for debuggee to read new byte codes nsk_jvmti_waitForSync#1*/ NSK_DISPLAY0("Wait for debuggee to read new byte codes nsk_jvmti_waitForSync#1\n"); @@ -214,7 +210,7 @@ if (!nsk_jvmti_waitForSync(timeout)) return; - agentJNI->DeleteGlobalRef(oldClassDef.klass); + jni->DeleteGlobalRef(oldClassDef.klass, TRACE_JNI_CALL); NSK_DISPLAY0("Let debuggee to finish\n"); if (!nsk_jvmti_resumeSync()) diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI01/bi01t001/libbi01t001.cpp b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI01/bi01t001/libbi01t001.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI01/bi01t001/libbi01t001.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI01/bi01t001/libbi01t001.cpp @@ -21,6 +21,7 @@ * questions. */ +#include "ExceptionCheckingJniEnv.cpp" #include "native_thread.cpp" #include "nsk_tools.cpp" #include "jni_tools.cpp" diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/BooleanArrayCriticalLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/BooleanArrayCriticalLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/BooleanArrayCriticalLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/BooleanArrayCriticalLocker.cpp @@ -46,18 +46,18 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - arr = (jbooleanArray) env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + arr = (jbooleanArray) env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); - size = env->GetArrayLength(arr); + size = env->GetArrayLength(arr, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - pa = (jboolean*) env->GetPrimitiveArrayCritical(arr, NULL); + pa = (jboolean*) env->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL); if (pa != NULL) { for (i = 0; i < size; ++i) hash ^= pa[i]; @@ -65,11 +65,11 @@ hash = JNI_FALSE; } mssleep((long) sleepTime); - env->ReleasePrimitiveArrayCritical(arr, pa, 0); + env->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, arr); + env->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL); return hash; } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/ByteArrayCriticalLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/ByteArrayCriticalLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/ByteArrayCriticalLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/ByteArrayCriticalLocker.cpp @@ -45,18 +45,18 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - arr = (jbyteArray) env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + arr = (jbyteArray) env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); - size = env->GetArrayLength(arr); + size = env->GetArrayLength(arr, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - pa = (jbyte*) env->GetPrimitiveArrayCritical(arr, NULL); + pa = (jbyte*) env->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL); if (pa != NULL) { for (i = 0; i < size; ++i) hash ^= pa[i]; @@ -64,11 +64,11 @@ hash = 0; } mssleep((long) sleepTime); - env->ReleasePrimitiveArrayCritical(arr, pa, 0); + env->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, arr); + env->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL); return hash; } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/CharArrayCriticalLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/CharArrayCriticalLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/CharArrayCriticalLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/CharArrayCriticalLocker.cpp @@ -46,18 +46,18 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - arr = (jcharArray) env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + arr = (jcharArray) env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); - size = env->GetArrayLength(arr); + size = env->GetArrayLength(arr, TRACE_JNI_CALL); start_time = time(NULL); current_time = 0; enterTime /= 1000; while (current_time - start_time < enterTime) { - pa = (jchar*) env->GetPrimitiveArrayCritical(arr, NULL); + pa = (jchar*) env->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL); if (pa != NULL) { for (i = 0; i < size; ++i) hash ^= pa[i]; @@ -65,11 +65,11 @@ hash = 0; } mssleep((long) sleepTime); - env->ReleasePrimitiveArrayCritical(arr, pa, 0); + env->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, arr); + env->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL); return hash; } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/DoubleArrayCriticalLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/DoubleArrayCriticalLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/DoubleArrayCriticalLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/DoubleArrayCriticalLocker.cpp @@ -46,18 +46,18 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - arr = (jdoubleArray) env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + arr = (jdoubleArray) env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); - size = env->GetArrayLength(arr); + size = env->GetArrayLength(arr, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - pa = (jdouble*) env->GetPrimitiveArrayCritical(arr, NULL); + pa = (jdouble*) env->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL); if (pa != NULL) { for (i = 0; i < size; ++i) hash += pa[i]; @@ -65,11 +65,11 @@ hash = 0; } mssleep((long) sleepTime); - env->ReleasePrimitiveArrayCritical(arr, pa, 0); + env->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, arr); + env->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL); return hash; } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/FloatArrayCriticalLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/FloatArrayCriticalLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/FloatArrayCriticalLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/FloatArrayCriticalLocker.cpp @@ -46,18 +46,18 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - arr = (jfloatArray) env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + arr = (jfloatArray) env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); - size = env->GetArrayLength(arr); + size = env->GetArrayLength(arr, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - pa = (jfloat*) env->GetPrimitiveArrayCritical(arr, NULL); + pa = (jfloat*) env->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL); if (pa != NULL) { for (i = 0; i < size; ++i) hash += pa[i]; @@ -65,11 +65,11 @@ hash = 0; } mssleep((long) sleepTime); - env->ReleasePrimitiveArrayCritical(arr, pa, 0); + env->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, arr); + env->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL); return hash; } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/IntArrayCriticalLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/IntArrayCriticalLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/IntArrayCriticalLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/IntArrayCriticalLocker.cpp @@ -46,18 +46,18 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - arr = (jintArray) env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + arr = (jintArray) env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); - size = env->GetArrayLength(arr); + size = env->GetArrayLength(arr, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - pa = (jint*) env->GetPrimitiveArrayCritical(arr, NULL); + pa = (jint*) env->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL); if (pa != NULL) { for (i = 0; i < size; ++i) hash ^= pa[i]; @@ -65,11 +65,11 @@ hash = 0; } mssleep((long) sleepTime); - env->ReleasePrimitiveArrayCritical(arr, pa, 0); + env->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, arr); + env->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL); return hash; } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/LongArrayCriticalLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/LongArrayCriticalLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/LongArrayCriticalLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/LongArrayCriticalLocker.cpp @@ -46,18 +46,18 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - arr = (jlongArray) env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + arr = (jlongArray) env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); - size = env->GetArrayLength(arr); + size = env->GetArrayLength(arr, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - pa = (jlong*) env->GetPrimitiveArrayCritical(arr, NULL); + pa = (jlong*) env->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL); if (pa != NULL) { for (i = 0; i < size; ++i) hash ^= pa[i]; @@ -65,11 +65,11 @@ hash = 0; } mssleep((long) sleepTime); - env->ReleasePrimitiveArrayCritical(arr, pa, 0); + env->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, arr); + env->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL); return hash; } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/ShortArrayCriticalLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/ShortArrayCriticalLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/ShortArrayCriticalLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/ShortArrayCriticalLocker.cpp @@ -46,18 +46,18 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - arr = (jshortArray) env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + arr = (jshortArray) env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); - size = env->GetArrayLength(arr); + size = env->GetArrayLength(arr, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - pa = (jshort*) env->GetPrimitiveArrayCritical(arr, NULL); + pa = (jshort*) env->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL); if (pa != NULL) { for (i = 0; i < size; ++i) hash ^= pa[i]; @@ -65,11 +65,11 @@ hash = 0; } mssleep((long) sleepTime); - env->ReleasePrimitiveArrayCritical(arr, pa, 0); + env->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, arr); + env->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL); return hash; } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/StringCriticalLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/StringCriticalLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/StringCriticalLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/StringCriticalLocker.cpp @@ -46,18 +46,18 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - str = (jstring) env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + str = (jstring) env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); - size = env->GetStringLength(str); + size = env->GetStringLength(str, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - pa = env->GetStringCritical(str, NULL); + pa = env->GetStringCritical(str, NULL, TRACE_JNI_CALL); if (pa != NULL) { for (i = 0; i < size; ++i) hash ^= pa[i]; @@ -65,11 +65,11 @@ hash = JNI_FALSE; } mssleep((long) sleepTime); - env->ReleaseStringCritical(str, pa); + env->ReleaseStringCritical(str, pa, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, str); + env->SetObjectField(o, objFieldId, str, TRACE_JNI_CALL); return hash; } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIGlobalRefLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIGlobalRefLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIGlobalRefLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIGlobalRefLocker.cpp @@ -45,22 +45,22 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - obj = env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + obj = env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - gref = env->NewGlobalRef(obj); + gref = env->NewGlobalRef(obj, TRACE_JNI_CALL); mssleep((long) sleepTime); - env->DeleteGlobalRef(gref); + env->DeleteGlobalRef(gref, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, obj); + env->SetObjectField(o, objFieldId, obj, TRACE_JNI_CALL); } } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNILocalRefLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNILocalRefLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNILocalRefLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNILocalRefLocker.cpp @@ -44,22 +44,22 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - obj = env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + obj = env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - gref = env->NewLocalRef(obj); + gref = env->NewLocalRef(obj, TRACE_JNI_CALL); mssleep((long) sleepTime); - env->DeleteLocalRef(gref); + env->DeleteLocalRef(gref, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, obj); + env->SetObjectField(o, objFieldId, obj, TRACE_JNI_CALL); } } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIRefLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIRefLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIRefLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIRefLocker.cpp @@ -44,28 +44,28 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - obj = env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + obj = env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - gref = env->NewGlobalRef(obj); - lref = env->NewLocalRef(obj); - gwref = env->NewWeakGlobalRef(obj); + gref = env->NewGlobalRef(obj, TRACE_JNI_CALL); + lref = env->NewLocalRef(obj, TRACE_JNI_CALL); + gwref = env->NewWeakGlobalRef(obj, TRACE_JNI_CALL); mssleep((long) sleepTime); - env->DeleteGlobalRef(gref); - env->DeleteLocalRef(lref); - env->DeleteWeakGlobalRef(gwref); + env->DeleteGlobalRef(gref, TRACE_JNI_CALL); + env->DeleteLocalRef(lref, TRACE_JNI_CALL); + env->DeleteWeakGlobalRef(gwref, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, obj); + env->SetObjectField(o, objFieldId, obj, TRACE_JNI_CALL); } } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIWeakGlobalRefLocker.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIWeakGlobalRefLocker.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIWeakGlobalRefLocker.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jniref/JNIWeakGlobalRefLocker.cpp @@ -44,23 +44,23 @@ time_t start_time, current_time; if (objFieldId == NULL) { - jclass klass = env->GetObjectClass(o); - objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;"); + jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); + objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL); } - obj = env->GetObjectField(o, objFieldId); - env->SetObjectField(o, objFieldId, NULL); + obj = env->GetObjectField(o, objFieldId, TRACE_JNI_CALL); + env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL); start_time = time(NULL); enterTime /= 1000; current_time = 0; while (current_time - start_time < enterTime) { - gref = env->NewWeakGlobalRef(obj); + gref = env->NewWeakGlobalRef(obj, TRACE_JNI_CALL); mssleep((long) sleepTime); - env->DeleteWeakGlobalRef(gref); + env->DeleteWeakGlobalRef(gref, TRACE_JNI_CALL); mssleep((long) sleepTime); current_time = time(NULL); } - env->SetObjectField(o, objFieldId, obj); + env->SetObjectField(o, objFieldId, obj, TRACE_JNI_CALL); } } diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.cpp b/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.cpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.cpp @@ -23,45 +23,97 @@ */ #include +#include #include "ExceptionCheckingJniEnv.hpp" +#include "nsk_tools.h" namespace { +static const char* get_basename(const char* fullname) { + const char* p; + const char* base = fullname;; + + if (fullname == NULL) { + return NULL; + } + + for (p = fullname; *p != '\0'; p++) { + if (*p == '/' || *p == '\\') { + base = p + 1; + } + } + return base; +} + template class JNIVerifier { public: - JNIVerifier(ExceptionCheckingJniEnv *env, const char* base_msg) - : _env(env), _base_msg(base_msg), _return_error(NULL) { + JNIVerifier(ExceptionCheckingJniEnv *env, const char* base_msg, + int line, const char* file) + : _env(env), _base_message(base_msg), _error_message(NULL), + _line(line), _file(get_basename(file)) { + } + + // Until C++11 is supported, we have to write multiple template constructors. + template + JNIVerifier(ExceptionCheckingJniEnv *env, const char* base_msg, + U parameter, + int line, const char* file) + : _env(env), _base_message(base_msg), _error_message(NULL), + _line(line), _file(get_basename(file)) { + PrintPreCall(parameter); + } + + template + JNIVerifier(ExceptionCheckingJniEnv *env, const char* base_msg, + U parameter1, + V parameter2, + int line, const char* file) + : _env(env), _base_message(base_msg), _error_message(NULL), + _line(line), _file(get_basename(file)) { + PrintPreCall(parameter1, parameter2); + } + + template + JNIVerifier(ExceptionCheckingJniEnv *env, const char* base_msg, + U parameter1, V parameter2, W parameter3, + int line, const char* file) + : _env(env), _base_message(base_msg), _error_message(NULL), + _line(line), _file(get_basename(file)) { + PrintPreCall(parameter1, parameter2, parameter3); } ~JNIVerifier() { + PrintPostCall(); + JNIEnv* jni_env = _env->GetJNIEnv(); if (jni_env->ExceptionCheck()) { - _env->HandleError(_base_msg); - return; + _error_message = "internal error"; } - if (_return_error != NULL) { - ProcessReturnError(); + if (_error_message != NULL) { + GenerateErrorMessage(); } } - void ProcessReturnError() { - int len = snprintf(NULL, 0, "%s : %s", _base_msg, _return_error) + 1; + void GenerateErrorMessage() { + int len = snprintf(NULL, 0, "JNI method %s : %s from %s:%d", _base_message, _error_message, + _file, _line) + 1; if (len <= 0) { - _env->HandleError(_return_error); + _env->HandleError(_error_message); return; } char* full_message = (char*) malloc(len); if (full_message == NULL) { - _env->HandleError(_return_error); + _env->HandleError(_error_message); return; } - snprintf(full_message, len, "%s : %s", _base_msg, _return_error); + snprintf(full_message, len, "JNI method %s : %s from %s:%d", _base_message, _error_message, + _file, _line); _env->HandleError(full_message); free(full_message); @@ -69,95 +121,229 @@ T ResultNotNull(T ptr) { if (ptr == NULL) { - _return_error = "Return is NULL"; + _error_message = "Return is NULL"; } return ptr; } + T ResultIsZero(T value) { + if (value != 0) { + _error_message = "Return is not zero"; + } + return value; + } + + void PrintPreCallHeader() { + if (!nsk_getVerboseMode()) { + return; + } + + std::cout << ">> Calling JNI method " << _base_message << " from " << _file + << ":" << _line << std::endl; + std::cout << ">> Calling with these parameter(s):" << std::endl; + } + + // Until C++11 is supported, we have to write multiple PrintPreCall. + template + void PrintPreCall(U first_parameter) { + if (!nsk_getVerboseMode()) { + return; + } + + PrintPreCallHeader(); + std::cout << "\t" << first_parameter << std::endl; + } + + template + void PrintPreCall(U parameter1, V parameter2) { + if (!nsk_getVerboseMode()) { + return; + } + + PrintPreCallHeader(); + std::cout << "\t" << parameter1 << std::endl; + std::cout << "\t" << parameter2 << std::endl; + } + + template + void PrintPreCall(U parameter1, V parameter2, W parameter3) { + if (!nsk_getVerboseMode()) { + return; + } + + PrintPreCallHeader(); + std::cout << "\t" << parameter1 << std::endl; + std::cout << "\t" << parameter2 << std::endl; + std::cout << "\t" << parameter3 << std::endl; + } + + void PrintPostCall() { + if (!nsk_getVerboseMode()) { + return; + } + + std::cout << "<< Called JNI method " << _base_message << " from " << _file + << ":" << _line << std::endl; + } + private: ExceptionCheckingJniEnv* _env; - const char* const _base_msg; - const char* _return_error; + const char* const _base_message; + const char* _error_message; + int _line; + const char* const _file; }; } -jclass ExceptionCheckingJniEnv::GetObjectClass(jobject obj) { - JNIVerifier marker(this, "GetObjectClass"); +jclass ExceptionCheckingJniEnv::FindClass(const char *class_name, + int line, const char* file_name) { + JNIVerifier marker(this, "FindClass", class_name, line, file_name); + return marker.ResultNotNull(_jni_env->FindClass(class_name)); +} + +jint ExceptionCheckingJniEnv::RegisterNatives(jclass clazz, + const JNINativeMethod *methods, + jint nMethods, + int line, + const char* file_name) { + JNIVerifier marker(this, "RegisterNatives", methods, nMethods, line, file_name); + return marker.ResultIsZero(_jni_env->RegisterNatives(clazz, methods, nMethods)); +} + +jclass ExceptionCheckingJniEnv::GetObjectClass(jobject obj, int line, + const char* file_name) { + JNIVerifier marker(this, "GetObjectClass", obj, line, file_name); return marker.ResultNotNull(_jni_env->GetObjectClass(obj)); } -jfieldID ExceptionCheckingJniEnv::GetFieldID(jclass klass, const char *name, const char* type) { - JNIVerifier marker(this, "GetFieldID"); +jfieldID ExceptionCheckingJniEnv::GetStaticFieldID(jclass klass, const char *name, + const char* type, + int line, const char* file_name) { + JNIVerifier marker(this, "GetStaticFieldID", klass, name, type, + line, file_name); + return marker.ResultNotNull(_jni_env->GetStaticFieldID(klass, name, type)); +} + +jfieldID ExceptionCheckingJniEnv::GetFieldID(jclass klass, const char *name, + const char* type, + int line, const char* file_name) { + JNIVerifier marker(this, "GetFieldID", klass, name, type, line, file_name); return marker.ResultNotNull(_jni_env->GetFieldID(klass, name, type)); } -jobject ExceptionCheckingJniEnv::GetObjectField(jobject obj, jfieldID field) { - JNIVerifier marker(this, "GetObjectField"); +jobject ExceptionCheckingJniEnv::GetStaticObjectField(jclass klass, jfieldID field, + int line, const char* file_name) { + JNIVerifier marker(this, "GetStaticObjectField", klass, field, + line, file_name); + return marker.ResultNotNull(_jni_env->GetStaticObjectField(klass, field)); +} + +jobject ExceptionCheckingJniEnv::GetObjectField(jobject obj, jfieldID field, + int line, const char* file_name) { + JNIVerifier marker(this, "GetObjectField", obj, field, line, file_name); return marker.ResultNotNull(_jni_env->GetObjectField(obj, field)); } -void ExceptionCheckingJniEnv::SetObjectField(jobject obj, jfieldID field, jobject value) { - JNIVerifier<> marker(this, "SetObjectField"); +void ExceptionCheckingJniEnv::SetObjectField(jobject obj, jfieldID field, jobject value, + int line, const char* file_name) { + JNIVerifier<> marker(this, "SetObjectField", obj, field, value, line, file_name); _jni_env->SetObjectField(obj, field, value); } -jobject ExceptionCheckingJniEnv::NewGlobalRef(jobject obj) { - JNIVerifier marker(this, "NewGlobalRef"); +jobject ExceptionCheckingJniEnv::NewGlobalRef(jobject obj, int line, const char* file_name) { + JNIVerifier marker(this, "NewGlobalRef", obj, line, file_name); return marker.ResultNotNull(_jni_env->NewGlobalRef(obj)); } -void ExceptionCheckingJniEnv::DeleteGlobalRef(jobject obj) { - JNIVerifier<> marker(this, "DeleteGlobalRef"); +void ExceptionCheckingJniEnv::DeleteGlobalRef(jobject obj, int line, const char* file_name) { + JNIVerifier<> marker(this, "DeleteGlobalRef", obj, line, file_name); _jni_env->DeleteGlobalRef(obj); } -jobject ExceptionCheckingJniEnv::NewLocalRef(jobject obj) { - JNIVerifier marker(this, "NewLocalRef"); +jobject ExceptionCheckingJniEnv::NewLocalRef(jobject obj, int line, const char* file_name) { + JNIVerifier marker(this, "NewLocalRef", obj, line, file_name); return marker.ResultNotNull(_jni_env->NewLocalRef(obj)); } -void ExceptionCheckingJniEnv::DeleteLocalRef(jobject obj) { - JNIVerifier<> marker(this, "DeleteLocalRef"); +void ExceptionCheckingJniEnv::DeleteLocalRef(jobject obj, int line, const char* file_name) { + JNIVerifier<> marker(this, "DeleteLocalRef", obj, line, file_name); _jni_env->DeleteLocalRef(obj); } -jweak ExceptionCheckingJniEnv::NewWeakGlobalRef(jobject obj) { - JNIVerifier marker(this, "NewWeakGlobalRef"); +jweak ExceptionCheckingJniEnv::NewWeakGlobalRef(jobject obj, int line, const char* file_name) { + JNIVerifier marker(this, "NewWeakGlobalRef", obj, line, file_name); return marker.ResultNotNull(_jni_env->NewWeakGlobalRef(obj)); } -void ExceptionCheckingJniEnv::DeleteWeakGlobalRef(jweak weak_ref) { - JNIVerifier<> marker(this, "DeleteWeakGlobalRef"); +void ExceptionCheckingJniEnv::DeleteWeakGlobalRef(jweak weak_ref, int line, const char* file_name) { + JNIVerifier<> marker(this, "DeleteWeakGlobalRef", weak_ref, line, file_name); _jni_env->DeleteWeakGlobalRef(weak_ref); } -jsize ExceptionCheckingJniEnv::GetArrayLength(jarray array) { - JNIVerifier<> marker(this, "GetArrayLength"); +jsize ExceptionCheckingJniEnv::GetArrayLength(jarray array, int line, const char* file_name) { + JNIVerifier<> marker(this, "GetArrayLength", array, line, file_name); return _jni_env->GetArrayLength(array); } -jsize ExceptionCheckingJniEnv::GetStringLength(jstring str) { - JNIVerifier<> marker(this, "GetStringLength"); +jsize ExceptionCheckingJniEnv::GetStringLength(jstring str, int line, const char* file_name) { + JNIVerifier<> marker(this, "GetStringLength", str, line, file_name); return _jni_env->GetStringLength(str); } -void* ExceptionCheckingJniEnv::GetPrimitiveArrayCritical(jarray array, jboolean* isCopy) { - JNIVerifier<> marker(this, "GetPrimitiveArrayCritical"); - return marker.ResultNotNull(_jni_env->GetPrimitiveArrayCritical(array, isCopy)); +void* ExceptionCheckingJniEnv::GetPrimitiveArrayCritical(jarray array, jboolean* is_copy, + int line, const char* file_name) { + JNIVerifier<> marker(this, "GetPrimitiveArrayCritical", array, is_copy, line, file_name); + return marker.ResultNotNull(_jni_env->GetPrimitiveArrayCritical(array, is_copy)); } -void ExceptionCheckingJniEnv::ReleasePrimitiveArrayCritical(jarray array, void* carray, jint mode) { - JNIVerifier<> marker(this, "ReleasePrimitiveArrayCritical"); +void ExceptionCheckingJniEnv::ReleasePrimitiveArrayCritical(jarray array, void* carray, jint mode, + int line, const char* file_name) { + JNIVerifier<> marker(this, "ReleasePrimitiveArrayCritical", array, carray, mode, + line, file_name); _jni_env->ReleasePrimitiveArrayCritical(array, carray, mode); } -const jchar* ExceptionCheckingJniEnv::GetStringCritical(jstring str, jboolean* isCopy) { - JNIVerifier marker(this, "GetPrimitiveArrayCritical"); - return marker.ResultNotNull(_jni_env->GetStringCritical(str, isCopy)); +const jchar* ExceptionCheckingJniEnv::GetStringCritical(jstring str, jboolean* is_copy, + int line, const char* file_name) { + JNIVerifier marker(this, "GetPrimitiveArrayCritical", str, is_copy, + line, file_name); + return marker.ResultNotNull(_jni_env->GetStringCritical(str, is_copy)); +} + +void ExceptionCheckingJniEnv::ReleaseStringCritical(jstring str, const jchar* carray, + int line, const char* file_name) { + JNIVerifier<> marker(this, "ReleaseStringCritical", str, carray, line, file_name); + _jni_env->ReleaseStringCritical(str, carray); +} + +jbyte* ExceptionCheckingJniEnv::GetByteArrayElements(jbyteArray array, jboolean* is_copy, + int line, const char* file_name) { + JNIVerifier marker(this, "GetByteArrayElements", array, is_copy, line, file_name); + return marker.ResultNotNull(_jni_env->GetByteArrayElements(array, is_copy)); } -void ExceptionCheckingJniEnv::ReleaseStringCritical(jstring str, const jchar* carray) { - JNIVerifier<> marker(this, "ReleaseStringCritical"); - _jni_env->ReleaseStringCritical(str, carray); +void ExceptionCheckingJniEnv::ReleaseByteArrayElements(jbyteArray array, jbyte* byte_array, jint mode, + int line, const char* file_name) { + JNIVerifier<> marker(this, "ReleaseByteArrayElements", array, byte_array, mode, + line, file_name); + _jni_env->ReleaseByteArrayElements(array, byte_array, mode); +} + +jmethodID ExceptionCheckingJniEnv::GetMethodID(jclass klass, const char* name, const char* sig, + int line, const char* file_name) { + JNIVerifier marker(this, "GetMethodID", klass, name, sig, line, file_name); + return marker.ResultNotNull(_jni_env->GetMethodID(klass, name, sig)); } + +jobject ExceptionCheckingJniEnv::NewObject(jclass klass, jmethodID methodID, + int line, const char* file_name, ...) { + // In the case of NewObject, we miss the extra arguments passed to NewObject sadly. + JNIVerifier marker(this, "NewObject", klass, methodID, line, file_name); + + va_list args; + va_start(args, file_name); + jobject result = marker.ResultNotNull(_jni_env->NewObjectV(klass, methodID, args)); + va_end(args); + return result; +} diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.hpp b/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.hpp --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.hpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.hpp @@ -46,40 +46,65 @@ * * Can be simplified to: * ... ExceptionCheckingJniEnv* env ... - * jclass klass = env->GetObjectClass(o); + * jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL); * * Where now the JNI Exception checking and the NULL return checking are done * internally and will perform whatever action the ErrorHandler requires. * + * Note the TRACE_JNI_CALL parameter that allows to trace where the call is + * happening from for debugging. + * * By default, the error handler describes the exception via the JNI * ExceptionDescribe method and calls FatalError. - * - * Note: at a future date, this will also include the tracing mechanism done in - * NSK_VERIFY, which will thus embed its logic into the ExceptionCheckingJniEnv - * and clearing that up for the code readers and writers. */ + +#define TRACE_JNI_CALL __LINE__, __FILE__ + class ExceptionCheckingJniEnv { public: // JNIEnv API redefinitions. - jfieldID GetFieldID(jclass klass, const char *name, const char* type); - jclass GetObjectClass(jobject obj); - jobject GetObjectField(jobject obj, jfieldID field); - void SetObjectField(jobject obj, jfieldID field, jobject value); + jclass FindClass(const char *name, int line, const char* file_name); + + jfieldID GetStaticFieldID(jclass klass, const char* name, const char* type, + int line, const char* file_name); + jfieldID GetFieldID(jclass klass, const char* name, const char* type, + int line, const char* file_name); + jmethodID GetMethodID(jclass klass, const char* name, const char* sig, + int line, const char* file_name); - jsize GetArrayLength(jarray array); - jsize GetStringLength(jstring str); + jclass GetObjectClass(jobject obj, int line, const char* file_name); + jobject GetObjectField(jobject obj, jfieldID field, int line, const char* file_name); + jobject GetStaticObjectField(jclass kls, jfieldID field, int line, const char* file_name); + void SetObjectField(jobject obj, jfieldID field, jobject value, + int line, const char* file_name); + + jsize GetArrayLength(jarray array, int line, const char* file_name); + jsize GetStringLength(jstring str, int line, const char* file_name); - void* GetPrimitiveArrayCritical(jarray array, jboolean* isCopy); - void ReleasePrimitiveArrayCritical(jarray array, void* carray, jint mode); - const jchar* GetStringCritical(jstring str, jboolean* isCopy); - void ReleaseStringCritical(jstring str, const jchar* carray); + void* GetPrimitiveArrayCritical(jarray array, jboolean* isCopy, + int line, const char* file_name); + void ReleasePrimitiveArrayCritical(jarray array, void* carray, jint mode, + int line, const char* file_name); + const jchar* GetStringCritical(jstring str, jboolean* isCopy, + int line, const char* file_name); + void ReleaseStringCritical(jstring str, const jchar* carray, + int line, const char* file_name); - jobject NewGlobalRef(jobject obj); - void DeleteGlobalRef(jobject obj); - jobject NewLocalRef(jobject ref); - void DeleteLocalRef(jobject ref); - jweak NewWeakGlobalRef(jobject obj); - void DeleteWeakGlobalRef(jweak obj); + jbyte* GetByteArrayElements(jbyteArray array, jboolean* isCopy, + int line, const char* file_name); + void ReleaseByteArrayElements(jbyteArray array, jbyte* byte_array, jint mode, + int line, const char* file_name); + jint RegisterNatives(jclass clazz, const JNINativeMethod *methods, jint nMethods, + int line, const char* file_name); + + jobject NewObject(jclass kls, jmethodID methodID, + int line, const char* file_name, ...); + jobject NewGlobalRef(jobject obj, int line, const char* file_name); + void DeleteGlobalRef(jobject obj, int line, const char* file_name); + jobject NewLocalRef(jobject ref, int line, const char* file_name); + void DeleteLocalRef(jobject ref, int line, const char* file_name); + jweak NewWeakGlobalRef(jobject obj, int line, const char* file_name); + void DeleteWeakGlobalRef(jweak obj, int line, const char* file_name); // ExceptionCheckingJniEnv methods. JNIEnv* GetJNIEnv() {