diff options
Diffstat (limited to 'tests/033-class-init-deadlock')
-rw-r--r-- | tests/033-class-init-deadlock/expected.txt | 7 | ||||
-rw-r--r-- | tests/033-class-init-deadlock/info.txt | 6 | ||||
-rw-r--r-- | tests/033-class-init-deadlock/src/Main.java | 51 |
3 files changed, 64 insertions, 0 deletions
diff --git a/tests/033-class-init-deadlock/expected.txt b/tests/033-class-init-deadlock/expected.txt new file mode 100644 index 0000000..387a426 --- /dev/null +++ b/tests/033-class-init-deadlock/expected.txt @@ -0,0 +1,7 @@ +Deadlock test starting. +A initializing... +B initializing... +Deadlock test interupting threads. +Deadlock test main thread bailing. +A initialized: false +B initialized: false diff --git a/tests/033-class-init-deadlock/info.txt b/tests/033-class-init-deadlock/info.txt new file mode 100644 index 0000000..08127da --- /dev/null +++ b/tests/033-class-init-deadlock/info.txt @@ -0,0 +1,6 @@ +This is a miscellaneous test that was imported into the new-at-the-time +runtime test framework. The test is intended to exercise basic features, +and as such cannot be build on top of junit, since failure of such basic +features might disrupt junit. + +TODO: Real description goes here. diff --git a/tests/033-class-init-deadlock/src/Main.java b/tests/033-class-init-deadlock/src/Main.java new file mode 100644 index 0000000..27c4922 --- /dev/null +++ b/tests/033-class-init-deadlock/src/Main.java @@ -0,0 +1,51 @@ +// Copyright 2006 The Android Open Source Project + +/** + * This causes most VMs to lock up. + * + * Interrupting threads in class initialization should NOT work. + */ +public class Main { + public static boolean aInitialized = false; + public static boolean bInitialized = false; + + static public void main(String[] args) { + Thread thread1, thread2; + + System.out.println("Deadlock test starting."); + thread1 = new Thread() { public void run() { new A(); } }; + thread2 = new Thread() { public void run() { new B(); } }; + thread1.start(); + thread2.start(); + + try { Thread.sleep(6000); } catch (InterruptedException ie) { } + + System.out.println("Deadlock test interupting threads."); + thread1.interrupt(); + thread2.interrupt(); + System.out.println("Deadlock test main thread bailing."); + System.out.println("A initialized: " + aInitialized); + System.out.println("B initialized: " + bInitialized); + System.exit(0); + } +} + +class A { + static { + System.out.println("A initializing..."); + try { Thread.sleep(3000); } catch (InterruptedException ie) { } + new B(); + System.out.println("A initialized"); + Main.aInitialized = true; + } +} + +class B { + static { + System.out.println("B initializing..."); + try { Thread.sleep(3000); } catch (InterruptedException ie) { } + new A(); + System.out.println("B initialized"); + Main.bInitialized = true; + } +} |