52 ObjectFree(jvmtiEnv *jvmti_env, jlong tag) {
53 NSK_COMPLAIN1("Received unexpected ObjectFree event for an object with tag %ld\n\n", (long)tag);
54 nsk_jvmti_setFailStatus();
55 obj_free++;
56 }
57
58 jvmtiIterationControl JNICALL
59 heapObjectCallback(jlong class_tag,
60 jlong size,
61 jlong* tag_ptr,
62 void* user_data) {
63
64 if (class_tag == DEBUGEE_CLASS_TAG) {
65 obj_count++;
66 }
67
68 return JVMTI_ITERATION_CONTINUE;
69 }
70
71 jvmtiIterationControl JNICALL
72 objectReferenceCallback( jvmtiObjectReferenceKind reference_kind,
73 jlong class_tag,
74 jlong size,
75 jlong* tag_ptr,
76 jlong referrer_tag,
77 jint referrer_index,
78 void* user_data) {
79
80 if (class_tag == DEBUGEE_CLASS_TAG && *tag_ptr != 0) {
81 obj_count++;
82 }
83
84 return JVMTI_ITERATION_CONTINUE;
85 }
86
87
88 /************************/
89
90 JNIEXPORT void JNICALL
91 Java_nsk_jvmti_scenarios_allocation_AP03_ap03t001_setTag( JNIEnv* jni, jobject obj, jlong tag) {
92
93 if (!NSK_JVMTI_VERIFY(jvmti->SetTag(obj, tag))) {
94 nsk_jvmti_setFailStatus();
95 }
96 }
97
98 static void JNICALL
99 agentProc(jvmtiEnv* jvmti, JNIEnv* jni, void* arg) {
100
101 jclass debugeeClass = NULL;
102
103 NSK_DISPLAY0("Wait for debugee start\n\n");
104 if (!NSK_VERIFY(nsk_jvmti_waitForSync(timeout)))
105 return;
106
107 do {
108 jobject catcher;
109 jfieldID fid;
110
111 NSK_DISPLAY1("Find debugee class: %s\n", DEBUGEE_SIGNATURE);
143
144 NSK_DISPLAY0("Calling IterateOverHeap with filter JVMTI_HEAP_OBJECT_TAGGED\n");
145 obj_count = 0;
146 if (!NSK_JVMTI_VERIFY(
147 jvmti->IterateOverHeap(JVMTI_HEAP_OBJECT_TAGGED, heapObjectCallback, &user_data))) {
148 nsk_jvmti_setFailStatus();
149 break;
150 }
151
152 if (obj_count != EXP_OBJ_NUMBER) {
153 nsk_jvmti_setFailStatus();
154 NSK_COMPLAIN2(
155 "IterateOverHeap found unexpected number of objects: %d\n"
156 "\texpected number: %d\n\n",
157 obj_count, EXP_OBJ_NUMBER);
158 } else {
159 NSK_DISPLAY1("Number of objects IterateOverHeap has found: %d\n\n", obj_count);
160 }
161
162 if (!NSK_JNI_VERIFY(jni, (fid =
163 jni->GetStaticFieldID(debugeeClass, "catcher", DEBUGEE_SIGNATURE)) != NULL )) {
164 nsk_jvmti_setFailStatus();
165 break;
166 }
167
168 if (!NSK_JNI_VERIFY(jni, (catcher =
169 jni->GetStaticObjectField(debugeeClass, fid)) != NULL )) {
170 NSK_COMPLAIN0("GetStaticObjectField returned NULL for 'catcher' field value\n\n");
171 nsk_jvmti_setFailStatus();
172 break;
173 }
174
175 NSK_DISPLAY0("Calling IterateOverObjectsReachableFromObject\n");
176 obj_count = 0;
177 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverObjectsReachableFromObject(catcher,
178 objectReferenceCallback,
179 &user_data))) {
180 nsk_jvmti_setFailStatus();
181 break;
182 }
183
184 if (obj_count != EXP_OBJ_NUMBER) {
185 nsk_jvmti_setFailStatus();
186 NSK_COMPLAIN2(
187 "IterateOverObjectsReachableFromObject found unexpected number of objects: %d\n"
188 "\texpected number: %d\n\n",
189 obj_count, EXP_OBJ_NUMBER);
|
52 ObjectFree(jvmtiEnv *jvmti_env, jlong tag) {
53 NSK_COMPLAIN1("Received unexpected ObjectFree event for an object with tag %ld\n\n", (long)tag);
54 nsk_jvmti_setFailStatus();
55 obj_free++;
56 }
57
58 jvmtiIterationControl JNICALL
59 heapObjectCallback(jlong class_tag,
60 jlong size,
61 jlong* tag_ptr,
62 void* user_data) {
63
64 if (class_tag == DEBUGEE_CLASS_TAG) {
65 obj_count++;
66 }
67
68 return JVMTI_ITERATION_CONTINUE;
69 }
70
71 jvmtiIterationControl JNICALL
72 objectReferenceCallback(jvmtiObjectReferenceKind reference_kind,
73 jlong class_tag,
74 jlong size,
75 jlong* tag_ptr,
76 jlong referrer_tag,
77 jint referrer_index,
78 void* user_data) {
79
80 if (class_tag == DEBUGEE_CLASS_TAG && *tag_ptr != 0) {
81 obj_count++;
82 }
83
84 return JVMTI_ITERATION_CONTINUE;
85 }
86
87
88 /************************/
89
90 JNIEXPORT void JNICALL
91 Java_nsk_jvmti_scenarios_allocation_AP03_ap03t001_setTag(JNIEnv* jni, jobject obj, jlong tag) {
92
93 if (!NSK_JVMTI_VERIFY(jvmti->SetTag(obj, tag))) {
94 nsk_jvmti_setFailStatus();
95 }
96 }
97
98 static void JNICALL
99 agentProc(jvmtiEnv* jvmti, JNIEnv* jni, void* arg) {
100
101 jclass debugeeClass = NULL;
102
103 NSK_DISPLAY0("Wait for debugee start\n\n");
104 if (!NSK_VERIFY(nsk_jvmti_waitForSync(timeout)))
105 return;
106
107 do {
108 jobject catcher;
109 jfieldID fid;
110
111 NSK_DISPLAY1("Find debugee class: %s\n", DEBUGEE_SIGNATURE);
143
144 NSK_DISPLAY0("Calling IterateOverHeap with filter JVMTI_HEAP_OBJECT_TAGGED\n");
145 obj_count = 0;
146 if (!NSK_JVMTI_VERIFY(
147 jvmti->IterateOverHeap(JVMTI_HEAP_OBJECT_TAGGED, heapObjectCallback, &user_data))) {
148 nsk_jvmti_setFailStatus();
149 break;
150 }
151
152 if (obj_count != EXP_OBJ_NUMBER) {
153 nsk_jvmti_setFailStatus();
154 NSK_COMPLAIN2(
155 "IterateOverHeap found unexpected number of objects: %d\n"
156 "\texpected number: %d\n\n",
157 obj_count, EXP_OBJ_NUMBER);
158 } else {
159 NSK_DISPLAY1("Number of objects IterateOverHeap has found: %d\n\n", obj_count);
160 }
161
162 if (!NSK_JNI_VERIFY(jni, (fid =
163 jni->GetStaticFieldID(debugeeClass, "catcher", DEBUGEE_SIGNATURE)) != NULL)) {
164 nsk_jvmti_setFailStatus();
165 break;
166 }
167
168 if (!NSK_JNI_VERIFY(jni, (catcher =
169 jni->GetStaticObjectField(debugeeClass, fid)) != NULL)) {
170 NSK_COMPLAIN0("GetStaticObjectField returned NULL for 'catcher' field value\n\n");
171 nsk_jvmti_setFailStatus();
172 break;
173 }
174
175 NSK_DISPLAY0("Calling IterateOverObjectsReachableFromObject\n");
176 obj_count = 0;
177 if (!NSK_JVMTI_VERIFY(jvmti->IterateOverObjectsReachableFromObject(catcher,
178 objectReferenceCallback,
179 &user_data))) {
180 nsk_jvmti_setFailStatus();
181 break;
182 }
183
184 if (obj_count != EXP_OBJ_NUMBER) {
185 nsk_jvmti_setFailStatus();
186 NSK_COMPLAIN2(
187 "IterateOverObjectsReachableFromObject found unexpected number of objects: %d\n"
188 "\texpected number: %d\n\n",
189 obj_count, EXP_OBJ_NUMBER);
|