diff options
| author | 2014-12-12 13:05:33 -0800 | |
|---|---|---|
| committer | 2014-12-12 16:42:20 -0800 | |
| commit | 905f5914fec4540156309c4de9bec3591d11bedc (patch) | |
| tree | 55696ecd068c7645c33748649ca35d36265bc104 | |
| parent | d1512fed4e43bba77fb21fd1b6322c22ef7c5881 (diff) | |
Add regression test for deadlock caused by Thread.getAllStackTraces
Also added stress test for Thread.getAllStackTraces. The test calls
Thread.getAllStackTraces from multiple threads to stress race
conditions which can cause deadlocks.
Bug: 18661622
Change-Id: Ideee7073fdcce784414808d08eca9ea310240073
| -rw-r--r-- | test/129-ThreadGetId/expected.txt | 1 | ||||
| -rw-r--r-- | test/129-ThreadGetId/info.txt | 1 | ||||
| -rw-r--r-- | test/129-ThreadGetId/src/Main.java | 53 |
3 files changed, 55 insertions, 0 deletions
diff --git a/test/129-ThreadGetId/expected.txt b/test/129-ThreadGetId/expected.txt new file mode 100644 index 0000000000..134d8d0b47 --- /dev/null +++ b/test/129-ThreadGetId/expected.txt @@ -0,0 +1 @@ +Finishing diff --git a/test/129-ThreadGetId/info.txt b/test/129-ThreadGetId/info.txt new file mode 100644 index 0000000000..443062db96 --- /dev/null +++ b/test/129-ThreadGetId/info.txt @@ -0,0 +1 @@ +Regression test for b/18661622 diff --git a/test/129-ThreadGetId/src/Main.java b/test/129-ThreadGetId/src/Main.java new file mode 100644 index 0000000000..9934bba95f --- /dev/null +++ b/test/129-ThreadGetId/src/Main.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.util.Map; + +public class Main implements Runnable { + static final int numberOfThreads = 5; + static final int totalOperations = 1000; + + public static void main(String[] args) throws Exception { + final Thread[] threads = new Thread[numberOfThreads]; + for (int t = 0; t < threads.length; t++) { + threads[t] = new Thread(new Main()); + threads[t].start(); + } + for (Thread t : threads) { + t.join(); + } + System.out.println("Finishing"); + } + + public void test_getId() { + if (Thread.currentThread().getId() <= 0) { + System.out.println("current thread's ID is not positive"); + } + // Check all the current threads for positive IDs. + Map<Thread, StackTraceElement[]> stMap = Thread.getAllStackTraces(); + for (Thread thread : stMap.keySet()) { + if (thread.getId() <= 0) { + System.out.println("thread's ID is not positive: " + thread.getName()); + } + } + } + + public void run() { + for (int i = 0; i < totalOperations; ++i) { + test_getId(); + } + } +} |