64 nsk_jvmti_setFailStatus();
65 }
66 }
67
68 return JVMTI_ITERATION_CONTINUE;
69 }
70
71 /* ========================================================================== */
72
73 static int prepare(JNIEnv* jni) {
74 const char* CLASS_NAME = "nsk/jvmti/scenarios/multienv/MA04/ma04t002";
75 const char* FIELD_NAME = "testedObject2";
76 const char* FIELD_SIGNATURE = "Ljava/lang/Object;";
77 const char* INSTANCE_NAME = "testedInstance2";
78 const char* INSTANCE_SIGNATURE = "Lnsk/jvmti/scenarios/multienv/MA04/ma04t002;";
79 jfieldID fid = NULL;
80
81 NSK_DISPLAY0("Obtain tested object from a static field of debugee class\n");
82
83 NSK_DISPLAY1("Find class: %s\n", CLASS_NAME);
84 if (!NSK_JNI_VERIFY(jni, (testedClass =
85 NSK_CPP_STUB2(FindClass, jni, CLASS_NAME)) != NULL))
86 return NSK_FALSE;
87
88 if (!NSK_JNI_VERIFY(jni, (testedClass = (jclass)
89 NSK_CPP_STUB2(NewGlobalRef, jni, testedClass)) != NULL))
90 return NSK_FALSE;
91
92 NSK_DISPLAY2("Find field: %s:%s\n", FIELD_NAME, FIELD_SIGNATURE);
93 if (!NSK_JNI_VERIFY(jni, (fid =
94 NSK_CPP_STUB4(GetStaticFieldID, jni, testedClass,
95 FIELD_NAME, FIELD_SIGNATURE)) != NULL))
96 return NSK_FALSE;
97
98 if (!NSK_JNI_VERIFY(jni, (testedObject =
99 NSK_CPP_STUB3(GetStaticObjectField, jni, testedClass, fid)) != NULL))
100 return NSK_FALSE;
101
102 NSK_DISPLAY2("Find class instance: %s:%s\n",
103 INSTANCE_NAME, INSTANCE_SIGNATURE);
104 if (!NSK_JNI_VERIFY(jni, (fid =
105 NSK_CPP_STUB4(GetStaticFieldID, jni, testedClass,
106 INSTANCE_NAME, INSTANCE_SIGNATURE)) != NULL))
107 return NSK_FALSE;
108
109 if (!NSK_JNI_VERIFY(jni, (testedInstance =
110 NSK_CPP_STUB3(GetStaticObjectField, jni, testedClass, fid)) != NULL))
111 return NSK_FALSE;
112
113 return NSK_TRUE;
114 }
115
116 /* ========================================================================== */
117
118 /** Agent algorithm. */
119 static void JNICALL
120 agentProc(jvmtiEnv* jvmti, JNIEnv* jni, void* arg) {
121 jint dummy;
122
123 if (!nsk_jvmti_waitForSync(timeout))
124 return;
125
126 if (!prepare(jni)) {
127 nsk_jvmti_setFailStatus();
128 return;
129 }
130
131 NSK_DISPLAY0("Testcase #1: check that there are no tagged objects\n");
132
133 ObjectsCount = 0;
134 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB4(IterateOverHeap, jvmti,
135 JVMTI_HEAP_OBJECT_EITHER, heap_object_callback, &dummy))) {
136 nsk_jvmti_setFailStatus();
137 return;
138 }
139 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
140 if (ObjectsCount != 0) {
141 NSK_COMPLAIN1("Some objects were unexpectedly tagged: %d\n",
142 ObjectsCount);
143 nsk_jvmti_setFailStatus();
144 }
145
146 ObjectsCount = 0;
147 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB4(IterateOverHeap, jvmti,
148 JVMTI_HEAP_OBJECT_TAGGED, heap_object_callback, &dummy))) {
149 nsk_jvmti_setFailStatus();
150 return;
151 }
152 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
153 if (ObjectsCount != 0) {
154 NSK_COMPLAIN1("Some objects were unexpectedly tagged: %d\n",
155 ObjectsCount);
156 nsk_jvmti_setFailStatus();
157 }
158
159 ObjectsCount = 0;
160 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB5(IterateOverInstancesOfClass, jvmti,
161 testedClass, JVMTI_HEAP_OBJECT_EITHER, heap_object_callback, &dummy))) {
162 nsk_jvmti_setFailStatus();
163 return;
164 }
165 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
166 if (ObjectsCount != 0) {
167 NSK_COMPLAIN1("Some class instances were unexpectedly tagged: %d\n",
168 ObjectsCount);
169 nsk_jvmti_setFailStatus();
170 }
171
172 ObjectsCount = 0;
173 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB5(IterateOverInstancesOfClass, jvmti,
174 testedClass, JVMTI_HEAP_OBJECT_EITHER, heap_object_callback, &dummy))) {
175 nsk_jvmti_setFailStatus();
176 return;
177 }
178 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
179 if (ObjectsCount != 0) {
180 NSK_COMPLAIN1("Some class instances were unexpectedly tagged: %d\n",
181 ObjectsCount);
182 nsk_jvmti_setFailStatus();
183 }
184
185 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetTag, jvmti, testedObject,
186 SAMPLE_TAG))) {
187 nsk_jvmti_setFailStatus();
188 return;
189 }
190
191 if (!NSK_VERIFY(nsk_jvmti_resumeSync()))
192 return;
193 if (!NSK_VERIFY(nsk_jvmti_waitForSync(timeout)))
194 return;
195
196
197 NSK_DISPLAY0("Testcase #2: check that there is only one object tagged\n");
198
199 ObjectsCount = 0;
200 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB4(IterateOverHeap, jvmti,
201 JVMTI_HEAP_OBJECT_EITHER, heap_object_callback, &dummy))) {
202 nsk_jvmti_setFailStatus();
203 return;
204 }
205 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
206 if (ObjectsCount != 1) {
207 NSK_COMPLAIN1("Expected 1 object to be tagged: %d\n", ObjectsCount);
208 nsk_jvmti_setFailStatus();
209 }
210
211 ObjectsCount = 0;
212 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB4(IterateOverHeap, jvmti,
213 JVMTI_HEAP_OBJECT_TAGGED, heap_object_callback, &dummy))) {
214 nsk_jvmti_setFailStatus();
215 return;
216 }
217 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
218 if (ObjectsCount != 1) {
219 NSK_COMPLAIN1("Expected 1 object to be tagged: %d\n", ObjectsCount);
220 nsk_jvmti_setFailStatus();
221 }
222
223 ObjectsCount = 0;
224 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB4(IterateOverHeap, jvmti,
225 JVMTI_HEAP_OBJECT_UNTAGGED, heap_object_callback, &dummy))) {
226 nsk_jvmti_setFailStatus();
227 return;
228 }
229 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
230 if (ObjectsCount != 0) {
231 NSK_COMPLAIN1("Some tagged objects were unexpectedly shown as untagged: %d\n",
232 ObjectsCount);
233 nsk_jvmti_setFailStatus();
234 }
235
236 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetTag, jvmti, testedInstance,
237 SAMPLE_TAG))) {
238 nsk_jvmti_setFailStatus();
239 return;
240 }
241
242 if (!NSK_VERIFY(nsk_jvmti_resumeSync()))
243 return;
244 if (!NSK_VERIFY(nsk_jvmti_waitForSync(timeout)))
245 return;
246
247
248 NSK_DISPLAY0("Testcase #3: check that there is only one class object tagged\n");
249
250 ObjectsCount = 0;
251 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB5(IterateOverInstancesOfClass, jvmti,
252 testedClass, JVMTI_HEAP_OBJECT_EITHER, heap_object_callback, &dummy))) {
253 nsk_jvmti_setFailStatus();
254 return;
255 }
256 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
257 if (ObjectsCount != 1) {
258 NSK_COMPLAIN1("Expected 1 class instance to be tagged: %d\n",
259 ObjectsCount);
260 nsk_jvmti_setFailStatus();
261 }
262
263 ObjectsCount = 0;
264 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB5(IterateOverInstancesOfClass, jvmti,
265 testedClass, JVMTI_HEAP_OBJECT_EITHER, heap_object_callback, &dummy))) {
266 nsk_jvmti_setFailStatus();
267 return;
268 }
269 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
270 if (ObjectsCount != 1) {
271 NSK_COMPLAIN1("Expected 1 class instance to be tagged: %d\n",
272 ObjectsCount);
273 nsk_jvmti_setFailStatus();
274 }
275
276 ObjectsCount = 0;
277 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB4(IterateOverHeap, jvmti,
278 JVMTI_HEAP_OBJECT_UNTAGGED, heap_object_callback, &dummy))) {
279 nsk_jvmti_setFailStatus();
280 return;
281 }
282 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
283 if (ObjectsCount != 0) {
284 NSK_COMPLAIN1("Some tagged class instances were unexpectedly shown as untagged: %d\n",
285 ObjectsCount);
286 nsk_jvmti_setFailStatus();
287 }
288
289
290 NSK_TRACE(NSK_CPP_STUB2(DeleteGlobalRef, jni, testedClass));
291
292 if (!nsk_jvmti_resumeSync())
293 return;
294 }
295
296 /* ========================================================================== */
297
298 /** Agent library initialization. */
299 #ifdef STATIC_BUILD
300 JNIEXPORT jint JNICALL Agent_OnLoad_ma04t002a(JavaVM *jvm, char *options, void *reserved) {
301 return Agent_Initialize(jvm, options, reserved);
302 }
303 JNIEXPORT jint JNICALL Agent_OnAttach_ma04t002a(JavaVM *jvm, char *options, void *reserved) {
304 return Agent_Initialize(jvm, options, reserved);
305 }
306 JNIEXPORT jint JNI_OnLoad_ma04t002a(JavaVM *jvm, char *options, void *reserved) {
307 return JNI_VERSION_1_8;
308 }
309 #endif
310 jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
311 jvmtiEnv* jvmti = NULL;
312 jvmtiEventCallbacks callbacks;
313 jvmtiCapabilities caps;
314
315 NSK_DISPLAY0("Agent_OnLoad\n");
316
317 if (!NSK_VERIFY(nsk_jvmti_parseOptions(options)))
318 return JNI_ERR;
319
320 timeout = nsk_jvmti_getWaitTime() * 60 * 1000;
321
322 if (!NSK_VERIFY((jvmti =
323 nsk_jvmti_createJVMTIEnv(jvm, reserved)) != NULL))
324 return JNI_ERR;
325
326 memset(&caps, 0, sizeof(caps));
327 caps.can_tag_objects = 1;
328 caps.can_generate_object_free_events = 1;
329 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(AddCapabilities, jvmti, &caps))) {
330 return JNI_ERR;
331 }
332
333 if (!NSK_VERIFY(nsk_jvmti_setAgentProc(agentProc, NULL)))
334 return JNI_ERR;
335
336 memset(&callbacks, 0, sizeof(callbacks));
337 if (!NSK_VERIFY(nsk_jvmti_init_MA(&callbacks)))
338 return JNI_ERR;
339
340 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode,
341 jvmti, JVMTI_ENABLE, JVMTI_EVENT_OBJECT_FREE, NULL)))
342 return JNI_ERR;
343
344 return JNI_OK;
345 }
346
347 /* ========================================================================== */
348
349 }
|
64 nsk_jvmti_setFailStatus();
65 }
66 }
67
68 return JVMTI_ITERATION_CONTINUE;
69 }
70
71 /* ========================================================================== */
72
73 static int prepare(JNIEnv* jni) {
74 const char* CLASS_NAME = "nsk/jvmti/scenarios/multienv/MA04/ma04t002";
75 const char* FIELD_NAME = "testedObject2";
76 const char* FIELD_SIGNATURE = "Ljava/lang/Object;";
77 const char* INSTANCE_NAME = "testedInstance2";
78 const char* INSTANCE_SIGNATURE = "Lnsk/jvmti/scenarios/multienv/MA04/ma04t002;";
79 jfieldID fid = NULL;
80
81 NSK_DISPLAY0("Obtain tested object from a static field of debugee class\n");
82
83 NSK_DISPLAY1("Find class: %s\n", CLASS_NAME);
84 if (!NSK_JNI_VERIFY(jni, (testedClass = jni->FindClass(CLASS_NAME)) != NULL))
85 return NSK_FALSE;
86
87 if (!NSK_JNI_VERIFY(jni, (testedClass = (jclass) jni->NewGlobalRef(testedClass)) != NULL))
88 return NSK_FALSE;
89
90 NSK_DISPLAY2("Find field: %s:%s\n", FIELD_NAME, FIELD_SIGNATURE);
91 if (!NSK_JNI_VERIFY(jni, (fid =
92 jni->GetStaticFieldID(testedClass, FIELD_NAME, FIELD_SIGNATURE)) != NULL))
93 return NSK_FALSE;
94
95 if (!NSK_JNI_VERIFY(jni, (testedObject = jni->GetStaticObjectField(testedClass, fid)) != NULL))
96 return NSK_FALSE;
97
98 NSK_DISPLAY2("Find class instance: %s:%s\n",
99 INSTANCE_NAME, INSTANCE_SIGNATURE);
100 if (!NSK_JNI_VERIFY(jni, (fid =
101 jni->GetStaticFieldID(testedClass, INSTANCE_NAME, INSTANCE_SIGNATURE)) != NULL))
102 return NSK_FALSE;
103
104 if (!NSK_JNI_VERIFY(jni, (testedInstance =
105 jni->GetStaticObjectField(testedClass, fid)) != NULL))
106 return NSK_FALSE;
107
108 return NSK_TRUE;
109 }
110
111 /* ========================================================================== */
112
113 /** Agent algorithm. */
114 static void JNICALL
115 agentProc(jvmtiEnv* jvmti, JNIEnv* jni, void* arg) {
116 jint dummy;
117
118 if (!nsk_jvmti_waitForSync(timeout))
119 return;
120
121 if (!prepare(jni)) {
122 nsk_jvmti_setFailStatus();
123 return;
124 }
125
126 NSK_DISPLAY0("Testcase #1: check that there are no tagged objects\n");
127
128 ObjectsCount = 0;
129 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverHeap(JVMTI_HEAP_OBJECT_EITHER, heap_object_callback, &dummy))) {
130 nsk_jvmti_setFailStatus();
131 return;
132 }
133 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
134 if (ObjectsCount != 0) {
135 NSK_COMPLAIN1("Some objects were unexpectedly tagged: %d\n",
136 ObjectsCount);
137 nsk_jvmti_setFailStatus();
138 }
139
140 ObjectsCount = 0;
141 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverHeap(JVMTI_HEAP_OBJECT_TAGGED, heap_object_callback, &dummy))) {
142 nsk_jvmti_setFailStatus();
143 return;
144 }
145 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
146 if (ObjectsCount != 0) {
147 NSK_COMPLAIN1("Some objects were unexpectedly tagged: %d\n",
148 ObjectsCount);
149 nsk_jvmti_setFailStatus();
150 }
151
152 ObjectsCount = 0;
153 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverInstancesOfClass(testedClass,
154 JVMTI_HEAP_OBJECT_EITHER,
155 heap_object_callback,
156 &dummy))) {
157 nsk_jvmti_setFailStatus();
158 return;
159 }
160 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
161 if (ObjectsCount != 0) {
162 NSK_COMPLAIN1("Some class instances were unexpectedly tagged: %d\n",
163 ObjectsCount);
164 nsk_jvmti_setFailStatus();
165 }
166
167 ObjectsCount = 0;
168 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverInstancesOfClass(testedClass,
169 JVMTI_HEAP_OBJECT_EITHER,
170 heap_object_callback,
171 &dummy))) {
172 nsk_jvmti_setFailStatus();
173 return;
174 }
175 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
176 if (ObjectsCount != 0) {
177 NSK_COMPLAIN1("Some class instances were unexpectedly tagged: %d\n",
178 ObjectsCount);
179 nsk_jvmti_setFailStatus();
180 }
181
182 if (!NSK_JVMTI_VERIFY(jvmti->SetTag(testedObject, SAMPLE_TAG))) {
183 nsk_jvmti_setFailStatus();
184 return;
185 }
186
187 if (!NSK_VERIFY(nsk_jvmti_resumeSync()))
188 return;
189 if (!NSK_VERIFY(nsk_jvmti_waitForSync(timeout)))
190 return;
191
192
193 NSK_DISPLAY0("Testcase #2: check that there is only one object tagged\n");
194
195 ObjectsCount = 0;
196 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverHeap(JVMTI_HEAP_OBJECT_EITHER, heap_object_callback, &dummy))) {
197 nsk_jvmti_setFailStatus();
198 return;
199 }
200 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
201 if (ObjectsCount != 1) {
202 NSK_COMPLAIN1("Expected 1 object to be tagged: %d\n", ObjectsCount);
203 nsk_jvmti_setFailStatus();
204 }
205
206 ObjectsCount = 0;
207 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverHeap(JVMTI_HEAP_OBJECT_TAGGED, heap_object_callback, &dummy))) {
208 nsk_jvmti_setFailStatus();
209 return;
210 }
211 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
212 if (ObjectsCount != 1) {
213 NSK_COMPLAIN1("Expected 1 object to be tagged: %d\n", ObjectsCount);
214 nsk_jvmti_setFailStatus();
215 }
216
217 ObjectsCount = 0;
218 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverHeap(JVMTI_HEAP_OBJECT_UNTAGGED, heap_object_callback, &dummy))) {
219 nsk_jvmti_setFailStatus();
220 return;
221 }
222 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
223 if (ObjectsCount != 0) {
224 NSK_COMPLAIN1("Some tagged objects were unexpectedly shown as untagged: %d\n",
225 ObjectsCount);
226 nsk_jvmti_setFailStatus();
227 }
228
229 if (!NSK_JVMTI_VERIFY(jvmti->SetTag(testedInstance, SAMPLE_TAG))) {
230 nsk_jvmti_setFailStatus();
231 return;
232 }
233
234 if (!NSK_VERIFY(nsk_jvmti_resumeSync()))
235 return;
236 if (!NSK_VERIFY(nsk_jvmti_waitForSync(timeout)))
237 return;
238
239
240 NSK_DISPLAY0("Testcase #3: check that there is only one class object tagged\n");
241
242 ObjectsCount = 0;
243 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverInstancesOfClass(testedClass,
244 JVMTI_HEAP_OBJECT_EITHER,
245 heap_object_callback,
246 &dummy))) {
247 nsk_jvmti_setFailStatus();
248 return;
249 }
250 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
251 if (ObjectsCount != 1) {
252 NSK_COMPLAIN1("Expected 1 class instance to be tagged: %d\n",
253 ObjectsCount);
254 nsk_jvmti_setFailStatus();
255 }
256
257 ObjectsCount = 0;
258 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverInstancesOfClass(testedClass,
259 JVMTI_HEAP_OBJECT_EITHER,
260 heap_object_callback,
261 &dummy))) {
262 nsk_jvmti_setFailStatus();
263 return;
264 }
265 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
266 if (ObjectsCount != 1) {
267 NSK_COMPLAIN1("Expected 1 class instance to be tagged: %d\n",
268 ObjectsCount);
269 nsk_jvmti_setFailStatus();
270 }
271
272 ObjectsCount = 0;
273 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverHeap(JVMTI_HEAP_OBJECT_UNTAGGED, heap_object_callback, &dummy))) {
274 nsk_jvmti_setFailStatus();
275 return;
276 }
277 NSK_DISPLAY1("ObjectsCount = %d\n", ObjectsCount);
278 if (ObjectsCount != 0) {
279 NSK_COMPLAIN1("Some tagged class instances were unexpectedly shown as untagged: %d\n",
280 ObjectsCount);
281 nsk_jvmti_setFailStatus();
282 }
283
284
285 NSK_TRACE(jni->DeleteGlobalRef(testedClass));
286
287 if (!nsk_jvmti_resumeSync())
288 return;
289 }
290
291 /* ========================================================================== */
292
293 /** Agent library initialization. */
294 #ifdef STATIC_BUILD
295 JNIEXPORT jint JNICALL Agent_OnLoad_ma04t002a(JavaVM *jvm, char *options, void *reserved) {
296 return Agent_Initialize(jvm, options, reserved);
297 }
298 JNIEXPORT jint JNICALL Agent_OnAttach_ma04t002a(JavaVM *jvm, char *options, void *reserved) {
299 return Agent_Initialize(jvm, options, reserved);
300 }
301 JNIEXPORT jint JNI_OnLoad_ma04t002a(JavaVM *jvm, char *options, void *reserved) {
302 return JNI_VERSION_1_8;
303 }
304 #endif
305 jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
306 jvmtiEnv* jvmti = NULL;
307 jvmtiEventCallbacks callbacks;
308 jvmtiCapabilities caps;
309
310 NSK_DISPLAY0("Agent_OnLoad\n");
311
312 if (!NSK_VERIFY(nsk_jvmti_parseOptions(options)))
313 return JNI_ERR;
314
315 timeout = nsk_jvmti_getWaitTime() * 60 * 1000;
316
317 if (!NSK_VERIFY((jvmti =
318 nsk_jvmti_createJVMTIEnv(jvm, reserved)) != NULL))
319 return JNI_ERR;
320
321 memset(&caps, 0, sizeof(caps));
322 caps.can_tag_objects = 1;
323 caps.can_generate_object_free_events = 1;
324 if (!NSK_JVMTI_VERIFY(jvmti->AddCapabilities(&caps))) {
325 return JNI_ERR;
326 }
327
328 if (!NSK_VERIFY(nsk_jvmti_setAgentProc(agentProc, NULL)))
329 return JNI_ERR;
330
331 memset(&callbacks, 0, sizeof(callbacks));
332 if (!NSK_VERIFY(nsk_jvmti_init_MA(&callbacks)))
333 return JNI_ERR;
334
335 if (!NSK_JVMTI_VERIFY(jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_OBJECT_FREE, NULL)))
336 return JNI_ERR;
337
338 return JNI_OK;
339 }
340
341 /* ========================================================================== */
342
343 }
|