summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/924-threads/expected.txt1
-rw-r--r--test/924-threads/src/Main.java16
-rw-r--r--test/924-threads/threads.cc20
3 files changed, 37 insertions, 0 deletions
diff --git a/test/924-threads/expected.txt b/test/924-threads/expected.txt
index 54065223cf..32e3368d02 100644
--- a/test/924-threads/expected.txt
+++ b/test/924-threads/expected.txt
@@ -28,3 +28,4 @@ class dalvik.system.PathClassLoader
e1 = ALIVE|WAITING_WITH_TIMEOUT|SLEEPING|WAITING
5 = ALIVE|RUNNABLE
2 = TERMINATED
+[Thread[FinalizerDaemon,5,system], Thread[FinalizerWatchdogDaemon,5,system], Thread[HeapTaskDaemon,5,system], Thread[ReferenceQueueDaemon,5,system], Thread[Signal Catcher,5,system], Thread[main,5,main]]
diff --git a/test/924-threads/src/Main.java b/test/924-threads/src/Main.java
index 048766604f..492a7ac6d1 100644
--- a/test/924-threads/src/Main.java
+++ b/test/924-threads/src/Main.java
@@ -17,6 +17,7 @@
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Comparator;
import java.util.concurrent.CountDownLatch;
import java.util.HashMap;
import java.util.List;
@@ -53,6 +54,8 @@ public class Main {
printThreadInfo(t3);
doStateTests();
+
+ doAllThreadsTests();
}
private static class Holder {
@@ -155,6 +158,18 @@ public class Main {
printThreadState(t);
}
+ private static void doAllThreadsTests() {
+ Thread[] threads = getAllThreads();
+ Arrays.sort(threads, THREAD_COMP);
+ System.out.println(Arrays.toString(threads));
+ }
+
+ private final static Comparator<Thread> THREAD_COMP = new Comparator<Thread>() {
+ public int compare(Thread o1, Thread o2) {
+ return o1.getName().compareTo(o2.getName());
+ }
+ };
+
private final static Map<Integer, String> STATE_NAMES = new HashMap<Integer, String>();
private final static List<Integer> STATE_KEYS = new ArrayList<Integer>();
static {
@@ -213,4 +228,5 @@ public class Main {
private static native Thread getCurrentThread();
private static native Object[] getThreadInfo(Thread t);
private static native int getThreadState(Thread t);
+ private static native Thread[] getAllThreads();
}
diff --git a/test/924-threads/threads.cc b/test/924-threads/threads.cc
index 4abf8fcf93..1487b7c64d 100644
--- a/test/924-threads/threads.cc
+++ b/test/924-threads/threads.cc
@@ -100,5 +100,25 @@ extern "C" JNIEXPORT jint JNICALL Java_Main_getThreadState(
return state;
}
+extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getAllThreads(
+ JNIEnv* env, jclass Main_klass ATTRIBUTE_UNUSED) {
+ jint thread_count;
+ jthread* threads;
+
+ jvmtiError result = jvmti_env->GetAllThreads(&thread_count, &threads);
+ if (JvmtiErrorToException(env, result)) {
+ return nullptr;
+ }
+
+ auto callback = [&](jint index) {
+ return threads[index];
+ };
+ jobjectArray ret = CreateObjectArray(env, thread_count, "java/lang/Thread", callback);
+
+ jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(threads));
+
+ return ret;
+}
+
} // namespace Test924Threads
} // namespace art