< prev index next >
test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI01/bi01t001/bi01t001.cpp
Print this page
rev 52828 : 8213501: Deploy ExceptionJniWrapper for a few tests
Summary:
Reviewed-by:
*** 22,31 ****
--- 22,32 ----
*/
#include <string.h>
#include "jvmti.h"
#include "agent_common.h"
+ #include "ExceptionCheckingJniEnv.hpp"
#include "jni_tools.h"
#include "jvmti_tools.h"
extern "C" {
*** 45,71 ****
* Method: setNewByteCode
* Signature: ([B)Z
*/
JNIEXPORT jboolean JNICALL
Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t001_setNewByteCode(JNIEnv *jni_env,
! jobject o, jbyteArray byteCode) {
!
jbyte* elements;
jboolean isCopy;
! newClassSize = jni_env->GetArrayLength(byteCode);
! if (!NSK_JNI_VERIFY(jni_env, 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;
! }
NSK_DISPLAY1("\t... got elements list: 0x%p\n", (void*)elements);
if (!NSK_JVMTI_VERIFY(jvmti->Allocate(newClassSize, &newClassBytes))) {
nsk_jvmti_setFailStatus();
return NSK_FALSE;
--- 46,69 ----
* Method: setNewByteCode
* Signature: ([B)Z
*/
JNIEXPORT jboolean JNICALL
Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t001_setNewByteCode(JNIEnv *jni_env,
! jobject o,
! jbyteArray byteCode) {
! ExceptionCheckingJniEnvPtr jni(jni_env);
jbyte* elements;
jboolean isCopy;
! newClassSize = jni->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->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))) {
nsk_jvmti_setFailStatus();
return NSK_FALSE;
*** 78,88 ****
newClassBytes[j] = (unsigned char)elements[j];
}
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));
NSK_DISPLAY0("\t... released\n");
return NSK_TRUE;
}
/* ============================================================================= */
--- 76,86 ----
newClassBytes[j] = (unsigned char)elements[j];
}
NSK_DISPLAY1("\t... copied bytecode: %d bytes\n", (int)newClassSize);
NSK_DISPLAY1("\t... release elements list: 0x%p\n", (void*)elements);
! jni->ReleaseByteArrayElements(byteCode, elements, JNI_ABORT, TRACE_JNI_CALL);
NSK_DISPLAY0("\t... released\n");
return NSK_TRUE;
}
/* ============================================================================= */
*** 92,106 ****
* Signature: (Ljava/lang/Class;)V
*/
JNIEXPORT void JNICALL
Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t001_setClass(JNIEnv *jni_env,
jobject o, jclass cls) {
!
! oldClassDef.klass = (jclass) jni_env->NewGlobalRef(cls);
! if (!NSK_JNI_VERIFY(jni_env, oldClassDef.klass != NULL)) {
! nsk_jvmti_setFailStatus();
! }
}
/* ============================================================================= */
/** Callback function for ClassFileLoadHook event. */
--- 90,101 ----
* Signature: (Ljava/lang/Class;)V
*/
JNIEXPORT void JNICALL
Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t001_setClass(JNIEnv *jni_env,
jobject o, jclass cls) {
! ExceptionCheckingJniEnvPtr jni(jni_env);
! oldClassDef.klass = (jclass) jni->NewGlobalRef(cls, TRACE_JNI_CALL);
}
/* ============================================================================= */
/** Callback function for ClassFileLoadHook event. */
*** 152,161 ****
--- 147,157 ----
/* ============================================================================= */
/** 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");
if (!nsk_jvmti_waitForSync(timeout))
return;
*** 212,222 ****
/*Wait for debuggee to check old byte code works nsk_jvmti_waitForSync#5*/
NSK_DISPLAY0("Wait for debuggee to check old byte code works nsk_jvmti_waitForSync#5\n");
if (!nsk_jvmti_waitForSync(timeout))
return;
! agentJNI->DeleteGlobalRef(oldClassDef.klass);
NSK_DISPLAY0("Let debuggee to finish\n");
if (!nsk_jvmti_resumeSync())
return;
--- 208,218 ----
/*Wait for debuggee to check old byte code works nsk_jvmti_waitForSync#5*/
NSK_DISPLAY0("Wait for debuggee to check old byte code works nsk_jvmti_waitForSync#5\n");
if (!nsk_jvmti_waitForSync(timeout))
return;
! jni->DeleteGlobalRef(oldClassDef.klass, TRACE_JNI_CALL);
NSK_DISPLAY0("Let debuggee to finish\n");
if (!nsk_jvmti_resumeSync())
return;
< prev index next >