226 if (objects_info[object].fields[field].type == TYPE_ARRAY && |
226 if (objects_info[object].fields[field].type == TYPE_ARRAY && |
227 element_count == objects_info[object].fields[field].size) { |
227 element_count == objects_info[object].fields[field].size) { |
228 int matched = 1; |
228 int matched = 1; |
229 int i; |
229 int i; |
230 for (i = 0; i < element_count && matched; i++) { |
230 for (i = 0; i < element_count && matched; i++) { |
231 matched = ((jint*)objects_info[object].fields[field].value)[i]== |
231 matched = ((jint*)objects_info[object].fields[field].value)[i] == |
232 ((jint*)elements)[i]; |
232 ((jint*)elements)[i]; |
233 } |
233 } |
234 if (matched) |
234 if (matched) |
235 objects_info[object].fields[field].found++; |
235 objects_info[object].fields[field].found++; |
236 } |
236 } |
266 //set expected fields value according to it's type |
266 //set expected fields value according to it's type |
267 void set_expected_value(field_info_t *field, int tagged, int is_static) { |
267 void set_expected_value(field_info_t *field, int tagged, int is_static) { |
268 if (field->primitive) { |
268 if (field->primitive) { |
269 field->size = (int) sizeof(jint); |
269 field->size = (int) sizeof(jint); |
270 if (is_static) { |
270 if (is_static) { |
271 field->value = (void*)(tagged ? &TAGGED_STATIC_INT_VALUE: |
271 field->value = (void*)(tagged ? &TAGGED_STATIC_INT_VALUE : &UNTAGGED_STATIC_INT_VALUE); |
272 &UNTAGGED_STATIC_INT_VALUE); |
|
273 } else { |
272 } else { |
274 field->value = (void*)(tagged ? &TAGGED_INT_VALUE: |
273 field->value = (void*)(tagged ? &TAGGED_INT_VALUE : &UNTAGGED_INT_VALUE); |
275 &UNTAGGED_INT_VALUE); |
|
276 } |
274 } |
277 field->type = TYPE_FIELD; |
275 field->type = TYPE_FIELD; |
278 } else if (0==strcmp(field->signature,STRING_SIGNATURE)) { |
276 } else if (0 == strcmp(field->signature,STRING_SIGNATURE)) { |
279 field->value = (void*)(tagged ? TAGGED_STRING_VALUE: |
277 field->value = (void*)(tagged ? TAGGED_STRING_VALUE : UNTAGGED_STRING_VALUE); |
280 UNTAGGED_STRING_VALUE); |
|
281 field->size = (int) wcslen((wchar_t*)field->value); |
278 field->size = (int) wcslen((wchar_t*)field->value); |
282 field->type = TYPE_STRING; |
279 field->type = TYPE_STRING; |
283 } else if (0==strcmp(field->signature,INT_ARRAY_SIGNATURE)) { |
280 } else if (0 == strcmp(field->signature,INT_ARRAY_SIGNATURE)) { |
284 field->size = INT_ARRAY_LENGTH; |
281 field->size = INT_ARRAY_LENGTH; |
285 field->value = (void*)(tagged ? TAGGED_INT_ARRAY_VALUE: |
282 field->value = (void*)(tagged ? TAGGED_INT_ARRAY_VALUE : UNTAGGED_INT_ARRAY_VALUE); |
286 UNTAGGED_INT_ARRAY_VALUE); |
|
287 field->type = TYPE_ARRAY; |
283 field->type = TYPE_ARRAY; |
288 } |
284 } |
289 } |
285 } |
290 |
286 |
291 /** |
287 /** |
425 |
421 |
426 // Check that every field was found expected amount of times |
422 // Check that every field was found expected amount of times |
427 void verify_objects(int reachable) { |
423 void verify_objects(int reachable) { |
428 int object; |
424 int object; |
429 int field; |
425 int field; |
430 for (object = 0; object < (reachable?TEST_OBJECTS_COUNT:TAGGED_OBJECTS); object++) { |
426 for (object = 0; object < (reachable ? TEST_OBJECTS_COUNT : TAGGED_OBJECTS); object++) { |
431 for (field = 0; field < objects_info[object].fields_count; field++) { |
427 for (field = 0; field < objects_info[object].fields_count; field++) { |
432 // If primitive field of object that was not collected or |
428 // If primitive field of object that was not collected or |
433 // non primitive field that was not collected was not found |
429 // non primitive field that was not collected was not found |
434 // expected amount of times, than test failed. |
430 // expected amount of times, than test failed. |
435 if ((objects_info[object].fields[field].primitive && |
431 if ((objects_info[object].fields[field].primitive && |
466 if (!NSK_VERIFY(nsk_jvmti_waitForSync(timeout))) { |
462 if (!NSK_VERIFY(nsk_jvmti_waitForSync(timeout))) { |
467 return; |
463 return; |
468 } |
464 } |
469 |
465 |
470 NSK_DISPLAY0("Tagging fields.\n"); |
466 NSK_DISPLAY0("Tagging fields.\n"); |
471 if (!NSK_VERIFY(JNI_OK==tag_objects(jvmti, jni))) { |
467 if (!NSK_VERIFY(JNI_OK == tag_objects(jvmti, jni))) { |
472 return; |
468 return; |
473 } |
469 } |
474 |
470 |
475 memset(&primitive_callbacks, 0, sizeof(jvmtiHeapCallbacks)); |
471 memset(&primitive_callbacks, 0, sizeof(jvmtiHeapCallbacks)); |
476 primitive_callbacks.primitive_field_callback = &field_callback; |
472 primitive_callbacks.primitive_field_callback = &field_callback; |