42
43 static jrawMonitorID eventsCounterMonitor;
44
45 static volatile int eventsCounter = 0;
46
47 void JNICALL classPrepareHandler(
48 jvmtiEnv *jvmti,
49 JNIEnv* jni,
50 jthread thread,
51 jclass klass) {
52 int success = 1;
53 char className[MAX_STRING_LENGTH];
54 jint loadedClassesCount;
55 jclass *loadedClasses;
56
57 if (!nsk_jvmti_aod_getClassName(jvmti, klass, className)) {
58 nsk_jvmti_aod_disableEventAndFinish(agentName, JVMTI_EVENT_CLASS_PREPARE, 0, jvmti, jni);
59 return;
60 }
61
62 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(GetLoadedClasses, jvmti, &loadedClassesCount, &loadedClasses))) {
63 NSK_COMPLAIN1("%s: failed to get loaded classes\n", agentName);
64 nsk_jvmti_aod_disableEventAndFinish(agentName, JVMTI_EVENT_CLASS_PREPARE, 0, jvmti, jni);
65 return;
66 }
67
68 nsk_jvmti_aod_deallocate(jvmti, (unsigned char*)loadedClasses);
69
70 if (NSK_JVMTI_VERIFY(NSK_CPP_STUB2(
71 RawMonitorEnter, jvmti, eventsCounterMonitor))) {
72
73 eventsCounter++;
74
75 NSK_DISPLAY3("%s: ClassPrepare event received for class '%s' (eventsCounter: %d)\n", agentName, className, eventsCounter);
76
77 if (eventsCounter == EXPECTED_EVENTS_NUMBER) {
78 NSK_DISPLAY2("%s: all expected events were received (eventsCounter: %d)\n", agentName, eventsCounter);
79
80 nsk_jvmti_aod_disableEventAndFinish(agentName, JVMTI_EVENT_CLASS_PREPARE, success, jvmti, jni);
81 }
82
83 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(RawMonitorExit, jvmti, eventsCounterMonitor))) {
84 success = 0;
85 }
86 } else {
87 success = 0;
88 }
89
90 if (!success) {
91 nsk_jvmti_aod_disableEventAndFinish(agentName, JVMTI_EVENT_CLASS_PREPARE, 0, jvmti, jni);
92 }
93 }
94
95 #ifdef STATIC_BUILD
96 JNIEXPORT jint JNI_OnLoad_attach045Agent01(JavaVM *jvm, char *options, void *reserved) {
97 return JNI_VERSION_1_8;
98 }
99 #endif
100
101 JNIEXPORT jint JNICALL
102 #ifdef STATIC_BUILD
103 Agent_OnAttach_attach045Agent01(JavaVM *vm, char *optionsString, void *reserved)
104 #else
105 Agent_OnAttach(JavaVM *vm, char *optionsString, void *reserved)
106 #endif
107 {
108 jvmtiEventCallbacks eventCallbacks;
109 jvmtiEnv* jvmti;
110 JNIEnv* jni;
111
112 if (!NSK_VERIFY((options = (Options*) nsk_aod_createOptions(optionsString)) != NULL))
113 return JNI_ERR;
114
115 agentName = nsk_aod_getOptionValue(options, NSK_AOD_AGENT_NAME_OPTION);
116
117 if ((jni = (JNIEnv*) nsk_aod_createJNIEnv(vm)) == NULL)
118 return JNI_ERR;
119
120 if (!NSK_VERIFY((jvmti = nsk_jvmti_createJVMTIEnv(vm, reserved)) != NULL))
121 return JNI_ERR;
122
123 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(CreateRawMonitor, jvmti, "attach045-agent01-eventsCounterMonitor", &eventsCounterMonitor))) {
124 return JNI_ERR;
125 }
126
127 memset(&eventCallbacks,0, sizeof(eventCallbacks));
128 eventCallbacks.ClassPrepare = classPrepareHandler;
129 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetEventCallbacks, jvmti, &eventCallbacks, sizeof(eventCallbacks))) ) {
130 return JNI_ERR;
131 }
132
133 if (!(nsk_jvmti_aod_enableEvent(jvmti, JVMTI_EVENT_CLASS_PREPARE))) {
134 return JNI_ERR;
135 }
136
137 NSK_DISPLAY1("%s: initialization was done\n", agentName);
138
139 if (!NSK_VERIFY(nsk_aod_agentLoaded(jni, agentName)))
140 return JNI_ERR;
141
142 return JNI_OK;
143 }
144
145
146 }
|
42
43 static jrawMonitorID eventsCounterMonitor;
44
45 static volatile int eventsCounter = 0;
46
47 void JNICALL classPrepareHandler(
48 jvmtiEnv *jvmti,
49 JNIEnv* jni,
50 jthread thread,
51 jclass klass) {
52 int success = 1;
53 char className[MAX_STRING_LENGTH];
54 jint loadedClassesCount;
55 jclass *loadedClasses;
56
57 if (!nsk_jvmti_aod_getClassName(jvmti, klass, className)) {
58 nsk_jvmti_aod_disableEventAndFinish(agentName, JVMTI_EVENT_CLASS_PREPARE, 0, jvmti, jni);
59 return;
60 }
61
62 if (!NSK_JVMTI_VERIFY(jvmti->GetLoadedClasses(&loadedClassesCount, &loadedClasses))) {
63 NSK_COMPLAIN1("%s: failed to get loaded classes\n", agentName);
64 nsk_jvmti_aod_disableEventAndFinish(agentName, JVMTI_EVENT_CLASS_PREPARE, 0, jvmti, jni);
65 return;
66 }
67
68 nsk_jvmti_aod_deallocate(jvmti, (unsigned char*)loadedClasses);
69
70 if (NSK_JVMTI_VERIFY(jvmti->RawMonitorEnter(eventsCounterMonitor))) {
71
72 eventsCounter++;
73
74 NSK_DISPLAY3("%s: ClassPrepare event received for class '%s' (eventsCounter: %d)\n", agentName, className, eventsCounter);
75
76 if (eventsCounter == EXPECTED_EVENTS_NUMBER) {
77 NSK_DISPLAY2("%s: all expected events were received (eventsCounter: %d)\n", agentName, eventsCounter);
78
79 nsk_jvmti_aod_disableEventAndFinish(agentName, JVMTI_EVENT_CLASS_PREPARE, success, jvmti, jni);
80 }
81
82 if (!NSK_JVMTI_VERIFY(jvmti->RawMonitorExit(eventsCounterMonitor))) {
83 success = 0;
84 }
85 } else {
86 success = 0;
87 }
88
89 if (!success) {
90 nsk_jvmti_aod_disableEventAndFinish(agentName, JVMTI_EVENT_CLASS_PREPARE, 0, jvmti, jni);
91 }
92 }
93
94 #ifdef STATIC_BUILD
95 JNIEXPORT jint JNI_OnLoad_attach045Agent01(JavaVM *jvm, char *options, void *reserved) {
96 return JNI_VERSION_1_8;
97 }
98 #endif
99
100 JNIEXPORT jint JNICALL
101 #ifdef STATIC_BUILD
102 Agent_OnAttach_attach045Agent01(JavaVM *vm, char *optionsString, void *reserved)
103 #else
104 Agent_OnAttach(JavaVM *vm, char *optionsString, void *reserved)
105 #endif
106 {
107 jvmtiEventCallbacks eventCallbacks;
108 jvmtiEnv* jvmti;
109 JNIEnv* jni;
110
111 if (!NSK_VERIFY((options = (Options*) nsk_aod_createOptions(optionsString)) != NULL))
112 return JNI_ERR;
113
114 agentName = nsk_aod_getOptionValue(options, NSK_AOD_AGENT_NAME_OPTION);
115
116 if ((jni = (JNIEnv*) nsk_aod_createJNIEnv(vm)) == NULL)
117 return JNI_ERR;
118
119 if (!NSK_VERIFY((jvmti = nsk_jvmti_createJVMTIEnv(vm, reserved)) != NULL))
120 return JNI_ERR;
121
122 if (!NSK_JVMTI_VERIFY(jvmti->CreateRawMonitor("attach045-agent01-eventsCounterMonitor", &eventsCounterMonitor))) {
123 return JNI_ERR;
124 }
125
126 memset(&eventCallbacks,0, sizeof(eventCallbacks));
127 eventCallbacks.ClassPrepare = classPrepareHandler;
128 if (!NSK_JVMTI_VERIFY(jvmti->SetEventCallbacks(&eventCallbacks, sizeof(eventCallbacks))) ) {
129 return JNI_ERR;
130 }
131
132 if (!(nsk_jvmti_aod_enableEvent(jvmti, JVMTI_EVENT_CLASS_PREPARE))) {
133 return JNI_ERR;
134 }
135
136 NSK_DISPLAY1("%s: initialization was done\n", agentName);
137
138 if (!NSK_VERIFY(nsk_aod_agentLoaded(jni, agentName)))
139 return JNI_ERR;
140
141 return JNI_OK;
142 }
143
144
145 }
|