174 verify_thread_state("vthread", jni, vthread,
175 exp_vt_state | JVMTI_THREAD_STATE_SUSPENDED | JVMTI_THREAD_STATE_INTERRUPTED,
176 expected_weak);
177 }
178
179 // resume vthread
180 LOG("resume vthread\n");
181 resume_thread(jvmti, jni, vthread);
182
183 // don't verify thread state after InterruptThread and ResumeThread
184 }
185
186 extern "C" JNIEXPORT int JNICALL
187 Java_GetThreadStateMountedTest_getErrorCount(JNIEnv* jni, jclass clazz) {
188 return error_count;
189 }
190
191
192 static std::atomic<bool> time_to_exit(false);
193
194 extern "C" JNIEXPORT void JNICALL
195 Java_GetThreadStateMountedTest_waitInNative(JNIEnv* jni, jclass clazz) {
196 // Notify main thread that we are ready
197 jfieldID fid = jni->GetStaticFieldID(clazz, "waitInNativeReady", "Z");
198 if (fid == nullptr) {
199 jni->FatalError("cannot get waitInNativeReady field");
200 return;
201 }
202 jni->SetStaticBooleanField(clazz, fid, JNI_TRUE);
203
204 while (!time_to_exit) {
205 sleep_ms(100);
206 }
207 }
208
209 extern "C" JNIEXPORT void JNICALL
210 Java_GetThreadStateMountedTest_endWait(JNIEnv* jni, jclass clazz) {
211 time_to_exit = true;
212 }
|
174 verify_thread_state("vthread", jni, vthread,
175 exp_vt_state | JVMTI_THREAD_STATE_SUSPENDED | JVMTI_THREAD_STATE_INTERRUPTED,
176 expected_weak);
177 }
178
179 // resume vthread
180 LOG("resume vthread\n");
181 resume_thread(jvmti, jni, vthread);
182
183 // don't verify thread state after InterruptThread and ResumeThread
184 }
185
186 extern "C" JNIEXPORT int JNICALL
187 Java_GetThreadStateMountedTest_getErrorCount(JNIEnv* jni, jclass clazz) {
188 return error_count;
189 }
190
191
192 static std::atomic<bool> time_to_exit(false);
193
194 extern "C" JNIEXPORT void JNICALL
195 Java_GetThreadStateMountedTest_runFromNative(JNIEnv* jni, jclass clazz, jobject runnable) {
196 jmethodID mid = jni->GetStaticMethodID(clazz, "runUpcall", "(Ljava/lang/Runnable;)V");
197 if (mid == nullptr) {
198 jni->FatalError("failed to get runUpcall method");
199 return;
200 }
201 jni->CallStaticVoidMethod(clazz, mid, runnable);
202 }
203
204 extern "C" JNIEXPORT void JNICALL
205 Java_GetThreadStateMountedTest_waitInNative(JNIEnv* jni, jclass clazz) {
206 // Notify main thread that we are ready
207 jfieldID fid = jni->GetStaticFieldID(clazz, "waitInNativeReady", "Z");
208 if (fid == nullptr) {
209 jni->FatalError("cannot get waitInNativeReady field");
210 return;
211 }
212 jni->SetStaticBooleanField(clazz, fid, JNI_TRUE);
213
214 while (!time_to_exit) {
215 sleep_ms(100);
216 }
217 }
218
219 extern "C" JNIEXPORT void JNICALL
220 Java_GetThreadStateMountedTest_endWait(JNIEnv* jni, jclass clazz) {
221 time_to_exit = true;
222 }
|