48 static int classLoaderCount = 0;
49
50 static jvmtiPhase currentPhase;
51
52 /* ============================================================================= */
53 /* ============================================================================= */
54
55
56 /*
57 * Class: nsk_jvmti_scenarios_events_EM01_em01t002
58 * Method: loadClass
59 * Signature: (Lnsk/share/ClassLoader;Ljava/lang/String;)Ljava/lang/Class;
60 */
61 JNIEXPORT jclass JNICALL
62 Java_nsk_jvmti_scenarios_events_EM01_em01t002_loadClass(JNIEnv *jni_env,
63 jobject o, jobject loader, jstring className) {
64 jclass klass;
65 jmethodID methodID;
66 jclass loadedClass;
67
68 if (!NSK_JNI_VERIFY(jni_env, (klass = jni_env->GetObjectClass(loader)) != NULL)) {
69 nsk_jvmti_setFailStatus();
70 return NULL;
71 }
72
73 if (!NSK_JNI_VERIFY(jni_env,
74 (methodID = jni_env->GetMethodID(
75 klass, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;")) != NULL)) {
76 nsk_jvmti_setFailStatus();
77 return NULL;
78 }
79
80 if (!NSK_JNI_VERIFY(jni_env, (loadedClass = (jclass)
81 jni_env->CallObjectMethod(loader, methodID, className)) != NULL)) {
82 nsk_jvmti_setFailStatus();
83 return NULL;
84 }
85
86 return loadedClass;
87 }
88
89 /*
90 * Class: nsk_jvmti_scenarios_events_EM01_em01t002
91 * Method: prepareClass
92 * Signature: (Ljava/lang/Class;)Z
93 */
94 JNIEXPORT jboolean JNICALL
95 Java_nsk_jvmti_scenarios_events_EM01_em01t002_prepareClass(JNIEnv *jni_env,
96 jobject o, jclass klass) {
97 jfieldID fieldID;
98
99 if (!NSK_JNI_VERIFY(jni_env, (fieldID =
100 jni_env->GetStaticFieldID(klass, "toProvokePreparation", "I")) != NULL)) {
101 nsk_jvmti_setFailStatus();
102 return NSK_FALSE;
103 }
104
105 return NSK_TRUE;
106 }
107
108 /*
109 * Class: nsk_jvmti_scenarios_events_EM01_em01t002
110 * Method: startThread
111 * Signature: (Ljava/lang/Thread;)Z
112 */
113 JNIEXPORT jboolean JNICALL
114 Java_nsk_jvmti_scenarios_events_EM01_em01t002_startThread(JNIEnv *jni_env,
115 jobject o, jobject thread) {
116 jclass klass;
117 jmethodID methodID;
118
119 if (!NSK_JNI_VERIFY(jni_env, (klass = jni_env->GetObjectClass(thread)) != NULL)) {
120 nsk_jvmti_setFailStatus();
121 return NSK_FALSE;
122 }
123
124 if (!NSK_JNI_VERIFY(jni_env, (methodID =
125 jni_env->GetMethodID(klass, "start", "()V")) != NULL)) {
126 nsk_jvmti_setFailStatus();
127 return NSK_FALSE;
128 }
129
130 if (!NSK_JNI_VERIFY_VOID(jni_env,jni_env->CallVoidMethod(thread, methodID)) ) {
131 nsk_jvmti_setFailStatus();
132 return NSK_FALSE;
133 }
134
135 return NSK_TRUE;
136 }
137
138 /* ============================================================================= */
139 /* ============================================================================= */
140
141 static void
142 changeCount(jvmtiEvent event) {
143
144 if (!NSK_JVMTI_VERIFY(jvmti->RawMonitorEnter(syncLock)))
145 nsk_jvmti_setFailStatus();
211 }
212
213 if (!NSK_JVMTI_VERIFY(jvmti_env->Deallocate((unsigned char*)className))) {
214 nsk_jvmti_setFailStatus();
215 }
216 if (generic != NULL)
217 if (!NSK_JVMTI_VERIFY(jvmti_env->Deallocate((unsigned char*)generic))) {
218 nsk_jvmti_setFailStatus();
219 }
220 }
221
222 void
223 threadEventHandler(jvmtiEvent event, jvmtiEnv* jvmti_env, JNIEnv* jni_env,
224 jthread thread) {
225 jclass classObject;
226 char *className;
227 char *generic;
228 jvmtiPhase phase;
229
230
231 if (!NSK_JNI_VERIFY(jni_env, (classObject = jni_env->GetObjectClass(thread)) != NULL)) {
232 nsk_jvmti_setFailStatus();
233 return;
234 }
235
236 if (!NSK_JVMTI_VERIFY(jvmti_env->GetClassSignature(classObject, &className, &generic))) {
237 nsk_jvmti_setFailStatus();
238 return;
239 }
240
241 if (strcmp(className, EXPECTED_CLASS_NAME) == 0) {
242 changeCount(event);
243 NSK_DISPLAY3("%25s(%4d)>>\tclass: %s\n",
244 TranslateEvent(event),
245 eventCount[event - JVMTI_MIN_EVENT_TYPE_VAL],
246 className);
247 }
248
249 if (!NSK_JVMTI_VERIFY(jvmti_env->GetPhase(&phase))) {
250 nsk_jvmti_setFailStatus();
251 }
504 JNIEXPORT jint JNICALL Agent_OnLoad_em01t002(JavaVM *jvm, char *options, void *reserved) {
505 return Agent_Initialize(jvm, options, reserved);
506 }
507 JNIEXPORT jint JNICALL Agent_OnAttach_em01t002(JavaVM *jvm, char *options, void *reserved) {
508 return Agent_Initialize(jvm, options, reserved);
509 }
510 JNIEXPORT jint JNI_OnLoad_em01t002(JavaVM *jvm, char *options, void *reserved) {
511 return JNI_VERSION_1_8;
512 }
513 #endif
514 jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
515
516 currentPhase = JVMTI_PHASE_ONLOAD;
517
518 if (!NSK_VERIFY(nsk_jvmti_parseOptions(options)))
519 return JNI_ERR;
520
521 timeout = nsk_jvmti_getWaitTime() * 60 * 1000;
522 classLoaderCount = nsk_jvmti_findOptionIntValue(CLASS_LOADER_COUNT_PARAM, 10);
523
524 if (!NSK_VERIFY((jvmti = nsk_jvmti_createJVMTIEnv(jvm, reserved)) != NULL))
525 return JNI_ERR;
526
527 if (!NSK_JVMTI_VERIFY(jvmti->CreateRawMonitor("_syncLock", &syncLock))) {
528 nsk_jvmti_setFailStatus();
529 return JNI_ERR;
530 }
531
532 if (!setCallBacks()) {
533 return JNI_ERR;
534 }
535
536 if (!enableEvent(JVMTI_ENABLE, JVMTI_EVENT_CLASS_LOAD)
537 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_CLASS_PREPARE)
538 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_THREAD_START)
539 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_THREAD_END)
540 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_VM_START)
541 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_VM_INIT)
542 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_VM_DEATH)
543 ) {
544 NSK_COMPLAIN0("Events could not be enabled");
|
48 static int classLoaderCount = 0;
49
50 static jvmtiPhase currentPhase;
51
52 /* ============================================================================= */
53 /* ============================================================================= */
54
55
56 /*
57 * Class: nsk_jvmti_scenarios_events_EM01_em01t002
58 * Method: loadClass
59 * Signature: (Lnsk/share/ClassLoader;Ljava/lang/String;)Ljava/lang/Class;
60 */
61 JNIEXPORT jclass JNICALL
62 Java_nsk_jvmti_scenarios_events_EM01_em01t002_loadClass(JNIEnv *jni_env,
63 jobject o, jobject loader, jstring className) {
64 jclass klass;
65 jmethodID methodID;
66 jclass loadedClass;
67
68 klass = jni_env->GetObjectClass(loader);
69 if (!NSK_JNI_VERIFY(jni_env, klass != NULL)) {
70 nsk_jvmti_setFailStatus();
71 return NULL;
72 }
73
74 methodID = jni_env->GetMethodID(
75 klass, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");
76 if (!NSK_JNI_VERIFY(jni_env, methodID != NULL)) {
77 nsk_jvmti_setFailStatus();
78 return NULL;
79 }
80
81 loadedClass = (jclass) jni_env->CallObjectMethod(loader, methodID, className);
82 if (!NSK_JNI_VERIFY(jni_env, loadedClass != NULL)) {
83 nsk_jvmti_setFailStatus();
84 return NULL;
85 }
86
87 return loadedClass;
88 }
89
90 /*
91 * Class: nsk_jvmti_scenarios_events_EM01_em01t002
92 * Method: prepareClass
93 * Signature: (Ljava/lang/Class;)Z
94 */
95 JNIEXPORT jboolean JNICALL
96 Java_nsk_jvmti_scenarios_events_EM01_em01t002_prepareClass(JNIEnv *jni_env,
97 jobject o, jclass klass) {
98 jfieldID fieldID;
99
100 fieldID = jni_env->GetStaticFieldID(klass, "toProvokePreparation", "I");
101 if (!NSK_JNI_VERIFY(jni_env, fieldID != NULL)) {
102 nsk_jvmti_setFailStatus();
103 return NSK_FALSE;
104 }
105
106 return NSK_TRUE;
107 }
108
109 /*
110 * Class: nsk_jvmti_scenarios_events_EM01_em01t002
111 * Method: startThread
112 * Signature: (Ljava/lang/Thread;)Z
113 */
114 JNIEXPORT jboolean JNICALL
115 Java_nsk_jvmti_scenarios_events_EM01_em01t002_startThread(JNIEnv *jni_env,
116 jobject o, jobject thread) {
117 jclass klass;
118 jmethodID methodID;
119
120 klass = jni_env->GetObjectClass(thread);
121 if (!NSK_JNI_VERIFY(jni_env, klass != NULL)) {
122 nsk_jvmti_setFailStatus();
123 return NSK_FALSE;
124 }
125
126 methodID = jni_env->GetMethodID(klass, "start", "()V");
127 if (!NSK_JNI_VERIFY(jni_env, methodID != NULL)) {
128 nsk_jvmti_setFailStatus();
129 return NSK_FALSE;
130 }
131
132 if (!NSK_JNI_VERIFY_VOID(jni_env,jni_env->CallVoidMethod(thread, methodID)) ) {
133 nsk_jvmti_setFailStatus();
134 return NSK_FALSE;
135 }
136
137 return NSK_TRUE;
138 }
139
140 /* ============================================================================= */
141 /* ============================================================================= */
142
143 static void
144 changeCount(jvmtiEvent event) {
145
146 if (!NSK_JVMTI_VERIFY(jvmti->RawMonitorEnter(syncLock)))
147 nsk_jvmti_setFailStatus();
213 }
214
215 if (!NSK_JVMTI_VERIFY(jvmti_env->Deallocate((unsigned char*)className))) {
216 nsk_jvmti_setFailStatus();
217 }
218 if (generic != NULL)
219 if (!NSK_JVMTI_VERIFY(jvmti_env->Deallocate((unsigned char*)generic))) {
220 nsk_jvmti_setFailStatus();
221 }
222 }
223
224 void
225 threadEventHandler(jvmtiEvent event, jvmtiEnv* jvmti_env, JNIEnv* jni_env,
226 jthread thread) {
227 jclass classObject;
228 char *className;
229 char *generic;
230 jvmtiPhase phase;
231
232
233 classObject = jni_env->GetObjectClass(thread);
234 if (!NSK_JNI_VERIFY(jni_env, classObject != NULL)) {
235 nsk_jvmti_setFailStatus();
236 return;
237 }
238
239 if (!NSK_JVMTI_VERIFY(jvmti_env->GetClassSignature(classObject, &className, &generic))) {
240 nsk_jvmti_setFailStatus();
241 return;
242 }
243
244 if (strcmp(className, EXPECTED_CLASS_NAME) == 0) {
245 changeCount(event);
246 NSK_DISPLAY3("%25s(%4d)>>\tclass: %s\n",
247 TranslateEvent(event),
248 eventCount[event - JVMTI_MIN_EVENT_TYPE_VAL],
249 className);
250 }
251
252 if (!NSK_JVMTI_VERIFY(jvmti_env->GetPhase(&phase))) {
253 nsk_jvmti_setFailStatus();
254 }
507 JNIEXPORT jint JNICALL Agent_OnLoad_em01t002(JavaVM *jvm, char *options, void *reserved) {
508 return Agent_Initialize(jvm, options, reserved);
509 }
510 JNIEXPORT jint JNICALL Agent_OnAttach_em01t002(JavaVM *jvm, char *options, void *reserved) {
511 return Agent_Initialize(jvm, options, reserved);
512 }
513 JNIEXPORT jint JNI_OnLoad_em01t002(JavaVM *jvm, char *options, void *reserved) {
514 return JNI_VERSION_1_8;
515 }
516 #endif
517 jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
518
519 currentPhase = JVMTI_PHASE_ONLOAD;
520
521 if (!NSK_VERIFY(nsk_jvmti_parseOptions(options)))
522 return JNI_ERR;
523
524 timeout = nsk_jvmti_getWaitTime() * 60 * 1000;
525 classLoaderCount = nsk_jvmti_findOptionIntValue(CLASS_LOADER_COUNT_PARAM, 10);
526
527 jvmti = nsk_jvmti_createJVMTIEnv(jvm, reserved);
528 if (!NSK_VERIFY(jvmti != NULL))
529 return JNI_ERR;
530
531 if (!NSK_JVMTI_VERIFY(jvmti->CreateRawMonitor("_syncLock", &syncLock))) {
532 nsk_jvmti_setFailStatus();
533 return JNI_ERR;
534 }
535
536 if (!setCallBacks()) {
537 return JNI_ERR;
538 }
539
540 if (!enableEvent(JVMTI_ENABLE, JVMTI_EVENT_CLASS_LOAD)
541 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_CLASS_PREPARE)
542 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_THREAD_START)
543 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_THREAD_END)
544 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_VM_START)
545 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_VM_INIT)
546 || !enableEvent(JVMTI_ENABLE, JVMTI_EVENT_VM_DEATH)
547 ) {
548 NSK_COMPLAIN0("Events could not be enabled");
|