diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/924-threads/expected.txt | 1 | ||||
| -rw-r--r-- | test/924-threads/src/Main.java | 16 | ||||
| -rw-r--r-- | test/924-threads/threads.cc | 20 |
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 |