87 if (NSK_JVMTI_VERIFY(jvmti->RawMonitorEnter(objectFreeMonitor))) {
88 freedObjectsCounter++;
89
90 if (!NSK_JVMTI_VERIFY(jvmti->RawMonitorExit(objectFreeMonitor))) {
91 success = 0;
92 }
93 } else {
94 success = 0;
95 }
96 }
97
98 #define ATTACH022_TARGET_APP_CLASS_NAME "nsk/jvmti/AttachOnDemand/attach022/attach022Target"
99
100 int registerNativeMethods(JNIEnv* jni) {
101 jclass appClass;
102 JNINativeMethod nativeMethods[] = {
103 {(char*)"shutdownAgent", (char*)"(I)Z",
104 (void*) Java_nsk_jvmti_AttachOnDemand_attach022_attach022Target_shutdownAgent}};
105 jint nativeMethodsNumber = 1;
106
107 if (!NSK_JNI_VERIFY(jni, (appClass =
108 jni->FindClass(ATTACH022_TARGET_APP_CLASS_NAME)) != NULL)) {
109 return NSK_FALSE;
110 }
111
112 if (!NSK_JNI_VERIFY(jni,
113 (jni->RegisterNatives(appClass, nativeMethods, nativeMethodsNumber) == 0))) {
114 return NSK_FALSE;
115 }
116
117 return NSK_TRUE;
118 }
119
120 void JNICALL vmObjectAllocHandler(jvmtiEnv * jvmti,
121 JNIEnv * jni,
122 jthread thread,
123 jobject object,
124 jclass object_class,
125 jlong size) {
126 char className[MAX_STRING_LENGTH];
127
128 if (!nsk_jvmti_aod_getClassName(jvmti, object_class, className)) {
159 }
160 }
161
162 #ifdef STATIC_BUILD
163 JNIEXPORT jint JNI_OnLoad_attach022Agent00(JavaVM *jvm, char *options, void *reserved) {
164 return JNI_VERSION_1_8;
165 }
166 #endif
167
168 JNIEXPORT jint JNICALL
169 #ifdef STATIC_BUILD
170 Agent_OnAttach_attach022Agent00(JavaVM *vm, char *optionsString, void *reserved)
171 #else
172 Agent_OnAttach(JavaVM *vm, char *optionsString, void *reserved)
173 #endif
174 {
175 jvmtiEventCallbacks eventCallbacks;
176 jvmtiCapabilities caps;
177 JNIEnv* jni;
178
179 if (!NSK_VERIFY((options = (Options*) nsk_aod_createOptions(optionsString)) != NULL))
180 return JNI_ERR;
181
182 agentName = nsk_aod_getOptionValue(options, NSK_AOD_AGENT_NAME_OPTION);
183
184 if ((jni = (JNIEnv*) nsk_aod_createJNIEnv(vm)) == NULL)
185 return JNI_ERR;
186
187 if (!NSK_VERIFY((jvmti = nsk_jvmti_createJVMTIEnv(vm, reserved)) != NULL))
188 return JNI_ERR;
189
190 if (!NSK_VERIFY(registerNativeMethods(jni))) {
191 return JNI_ERR;
192 }
193
194 if (!NSK_JVMTI_VERIFY(jvmti->CreateRawMonitor("ObjectTagMonitor", &objectTagMonitor))) {
195 return JNI_ERR;
196 }
197
198 if (!NSK_JVMTI_VERIFY(jvmti->CreateRawMonitor("ObjectFreeMonitor", &objectFreeMonitor))) {
199 return JNI_ERR;
200 }
201
202 memset(&caps, 0, sizeof(caps));
203 caps.can_tag_objects = 1;
204 caps.can_generate_object_free_events = 1;
205 caps.can_generate_vm_object_alloc_events = 1;
206 if (!NSK_JVMTI_VERIFY(jvmti->AddCapabilities(&caps))) {
207 return JNI_ERR;
|
87 if (NSK_JVMTI_VERIFY(jvmti->RawMonitorEnter(objectFreeMonitor))) {
88 freedObjectsCounter++;
89
90 if (!NSK_JVMTI_VERIFY(jvmti->RawMonitorExit(objectFreeMonitor))) {
91 success = 0;
92 }
93 } else {
94 success = 0;
95 }
96 }
97
98 #define ATTACH022_TARGET_APP_CLASS_NAME "nsk/jvmti/AttachOnDemand/attach022/attach022Target"
99
100 int registerNativeMethods(JNIEnv* jni) {
101 jclass appClass;
102 JNINativeMethod nativeMethods[] = {
103 {(char*)"shutdownAgent", (char*)"(I)Z",
104 (void*) Java_nsk_jvmti_AttachOnDemand_attach022_attach022Target_shutdownAgent}};
105 jint nativeMethodsNumber = 1;
106
107 appClass = jni->FindClass(ATTACH022_TARGET_APP_CLASS_NAME);
108 if (!NSK_JNI_VERIFY(jni, appClass != NULL)) {
109 return NSK_FALSE;
110 }
111
112 if (!NSK_JNI_VERIFY(jni,
113 (jni->RegisterNatives(appClass, nativeMethods, nativeMethodsNumber) == 0))) {
114 return NSK_FALSE;
115 }
116
117 return NSK_TRUE;
118 }
119
120 void JNICALL vmObjectAllocHandler(jvmtiEnv * jvmti,
121 JNIEnv * jni,
122 jthread thread,
123 jobject object,
124 jclass object_class,
125 jlong size) {
126 char className[MAX_STRING_LENGTH];
127
128 if (!nsk_jvmti_aod_getClassName(jvmti, object_class, className)) {
159 }
160 }
161
162 #ifdef STATIC_BUILD
163 JNIEXPORT jint JNI_OnLoad_attach022Agent00(JavaVM *jvm, char *options, void *reserved) {
164 return JNI_VERSION_1_8;
165 }
166 #endif
167
168 JNIEXPORT jint JNICALL
169 #ifdef STATIC_BUILD
170 Agent_OnAttach_attach022Agent00(JavaVM *vm, char *optionsString, void *reserved)
171 #else
172 Agent_OnAttach(JavaVM *vm, char *optionsString, void *reserved)
173 #endif
174 {
175 jvmtiEventCallbacks eventCallbacks;
176 jvmtiCapabilities caps;
177 JNIEnv* jni;
178
179 options = (Options*) nsk_aod_createOptions(optionsString);
180 if (!NSK_VERIFY(options != NULL))
181 return JNI_ERR;
182
183 agentName = nsk_aod_getOptionValue(options, NSK_AOD_AGENT_NAME_OPTION);
184
185 jni = (JNIEnv*) nsk_aod_createJNIEnv(vm);
186 if (jni == NULL)
187 return JNI_ERR;
188
189 jvmti = nsk_jvmti_createJVMTIEnv(vm, reserved);
190 if (!NSK_VERIFY(jvmti != NULL))
191 return JNI_ERR;
192
193 if (!NSK_VERIFY(registerNativeMethods(jni))) {
194 return JNI_ERR;
195 }
196
197 if (!NSK_JVMTI_VERIFY(jvmti->CreateRawMonitor("ObjectTagMonitor", &objectTagMonitor))) {
198 return JNI_ERR;
199 }
200
201 if (!NSK_JVMTI_VERIFY(jvmti->CreateRawMonitor("ObjectFreeMonitor", &objectFreeMonitor))) {
202 return JNI_ERR;
203 }
204
205 memset(&caps, 0, sizeof(caps));
206 caps.can_tag_objects = 1;
207 caps.can_generate_object_free_events = 1;
208 caps.can_generate_vm_object_alloc_events = 1;
209 if (!NSK_JVMTI_VERIFY(jvmti->AddCapabilities(&caps))) {
210 return JNI_ERR;
|