28 #include "jni_tools.h"
29 #include "jvmti_tools.h"
30
31 extern "C" {
32
33 /* ============================================================================= */
34
35 #define STATUS_FAIL 97
36
37 /* ============================================================================= */
38
39 /**
40 * Callback for VM_DEATH event.
41 */
42 JNIEXPORT void JNICALL
43 callbackVMDeath(jvmtiEnv* jvmti, JNIEnv* jni) {
44 int success = NSK_TRUE;
45
46 NSK_DISPLAY0("Disable VM_DEATH event in VM_DEATH callback\n");
47 if (!NSK_JVMTI_VERIFY(
48 NSK_CPP_STUB4(SetEventNotificationMode, jvmti, JVMTI_DISABLE,
49 JVMTI_EVENT_VM_DEATH, NULL))) {
50 success = NSK_FALSE;
51 } else {
52 NSK_DISPLAY0(" ... disabled\n");
53 }
54
55 NSK_DISPLAY0(">>> Testcase #1: Dispose JVMTI environment in VM_DEATH callback\n");
56 if (!NSK_JVMTI_VERIFY(
57 NSK_CPP_STUB1(DisposeEnvironment, jvmti))) {
58 success = NSK_FALSE;
59 } else {
60 NSK_DISPLAY0(" ... disposed\n");
61 }
62
63 if (!success) {
64 NSK_DISPLAY1("Exit with FAIL exit status: %d\n", STATUS_FAIL);
65 NSK_BEFORE_TRACE(exit(STATUS_FAIL));
66 }
67 }
68
69 /* ============================================================================= */
70
71 /** Agent library initialization. */
72 #ifdef STATIC_BUILD
73 JNIEXPORT jint JNICALL Agent_OnLoad_disposeenv002(JavaVM *jvm, char *options, void *reserved) {
74 return Agent_Initialize(jvm, options, reserved);
75 }
76 JNIEXPORT jint JNICALL Agent_OnAttach_disposeenv002(JavaVM *jvm, char *options, void *reserved) {
77 return Agent_Initialize(jvm, options, reserved);
78 }
79 JNIEXPORT jint JNI_OnLoad_disposeenv002(JavaVM *jvm, char *options, void *reserved) {
80 return JNI_VERSION_1_8;
81 }
82 #endif
83 jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
84 jvmtiEnv* jvmti = NULL;
85
86 if (!NSK_VERIFY(nsk_jvmti_parseOptions(options)))
87 return JNI_ERR;
88
89 if (!NSK_VERIFY((jvmti =
90 nsk_jvmti_createJVMTIEnv(jvm, reserved)) != NULL))
91 return JNI_ERR;
92
93 {
94 jvmtiEventCallbacks eventCallbacks;
95
96 memset(&eventCallbacks, 0, sizeof(eventCallbacks));
97 eventCallbacks.VMDeath = callbackVMDeath;
98 if (!NSK_JVMTI_VERIFY(
99 NSK_CPP_STUB3(SetEventCallbacks, jvmti,
100 &eventCallbacks, sizeof(eventCallbacks)))) {
101 return JNI_ERR;
102 }
103
104 NSK_DISPLAY0("Enable VM_DEATH event in JVM_OnLoad()\n");
105 if (!NSK_JVMTI_VERIFY(
106 NSK_CPP_STUB4(SetEventNotificationMode, jvmti, JVMTI_ENABLE,
107 JVMTI_EVENT_VM_DEATH, NULL))) {
108 return JNI_ERR;
109 }
110 NSK_DISPLAY0(" ... enabled\n");
111 }
112
113 return JNI_OK;
114 }
115
116 /* ============================================================================= */
117
118 }
|
28 #include "jni_tools.h"
29 #include "jvmti_tools.h"
30
31 extern "C" {
32
33 /* ============================================================================= */
34
35 #define STATUS_FAIL 97
36
37 /* ============================================================================= */
38
39 /**
40 * Callback for VM_DEATH event.
41 */
42 JNIEXPORT void JNICALL
43 callbackVMDeath(jvmtiEnv* jvmti, JNIEnv* jni) {
44 int success = NSK_TRUE;
45
46 NSK_DISPLAY0("Disable VM_DEATH event in VM_DEATH callback\n");
47 if (!NSK_JVMTI_VERIFY(
48 jvmti->SetEventNotificationMode(JVMTI_DISABLE, JVMTI_EVENT_VM_DEATH, NULL))) {
49 success = NSK_FALSE;
50 } else {
51 NSK_DISPLAY0(" ... disabled\n");
52 }
53
54 NSK_DISPLAY0(">>> Testcase #1: Dispose JVMTI environment in VM_DEATH callback\n");
55 if (!NSK_JVMTI_VERIFY(jvmti->DisposeEnvironment())) {
56 success = NSK_FALSE;
57 } else {
58 NSK_DISPLAY0(" ... disposed\n");
59 }
60
61 if (!success) {
62 NSK_DISPLAY1("Exit with FAIL exit status: %d\n", STATUS_FAIL);
63 NSK_BEFORE_TRACE(exit(STATUS_FAIL));
64 }
65 }
66
67 /* ============================================================================= */
68
69 /** Agent library initialization. */
70 #ifdef STATIC_BUILD
71 JNIEXPORT jint JNICALL Agent_OnLoad_disposeenv002(JavaVM *jvm, char *options, void *reserved) {
72 return Agent_Initialize(jvm, options, reserved);
73 }
74 JNIEXPORT jint JNICALL Agent_OnAttach_disposeenv002(JavaVM *jvm, char *options, void *reserved) {
75 return Agent_Initialize(jvm, options, reserved);
76 }
77 JNIEXPORT jint JNI_OnLoad_disposeenv002(JavaVM *jvm, char *options, void *reserved) {
78 return JNI_VERSION_1_8;
79 }
80 #endif
81 jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
82 jvmtiEnv* jvmti = NULL;
83
84 if (!NSK_VERIFY(nsk_jvmti_parseOptions(options)))
85 return JNI_ERR;
86
87 if (!NSK_VERIFY((jvmti =
88 nsk_jvmti_createJVMTIEnv(jvm, reserved)) != NULL))
89 return JNI_ERR;
90
91 {
92 jvmtiEventCallbacks eventCallbacks;
93
94 memset(&eventCallbacks, 0, sizeof(eventCallbacks));
95 eventCallbacks.VMDeath = callbackVMDeath;
96 if (!NSK_JVMTI_VERIFY(jvmti->SetEventCallbacks(&eventCallbacks, sizeof(eventCallbacks)))) {
97 return JNI_ERR;
98 }
99
100 NSK_DISPLAY0("Enable VM_DEATH event in JVM_OnLoad()\n");
101 if (!NSK_JVMTI_VERIFY(
102 jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_VM_DEATH, NULL))) {
103 return JNI_ERR;
104 }
105 NSK_DISPLAY0(" ... enabled\n");
106 }
107
108 return JNI_OK;
109 }
110
111 /* ============================================================================= */
112
113 }
|