6535104: TEST_BUG: FindDeadlocks.java fails intermittently.
authormchung
Tue, 26 May 2009 18:09:32 -0700
changeset 2934 7b3a71a2fc3c
parent 2933 08ea3ecb912c
child 2935 399e50e37667
6535104: TEST_BUG: FindDeadlocks.java fails intermittently. Summary: Retry a few times to check thread status before reporting failure Reviewed-by: swamyv
jdk/test/java/lang/management/ThreadMXBean/SynchronizerDeadlock.java
jdk/test/java/lang/management/ThreadMXBean/SynchronizerLockingThread.java
--- a/jdk/test/java/lang/management/ThreadMXBean/SynchronizerDeadlock.java	Tue May 26 18:07:14 2009 -0700
+++ b/jdk/test/java/lang/management/ThreadMXBean/SynchronizerDeadlock.java	Tue May 26 18:09:32 2009 -0700
@@ -83,11 +83,24 @@
 
     void waitUntilDeadlock() {
         barr.await();
-        // sleep a little while to wait until threads are blocked.
-        try {
-            Thread.sleep(100);
-        } catch (InterruptedException e) {
-            // ignore
+
+        for (int i=0; i < 100; i++) {
+            // sleep a little while to wait until threads are blocked.
+            try {
+                Thread.sleep(100);
+            } catch (InterruptedException e) {
+                // ignore
+            }
+            boolean retry = false;
+            for (Thread t: dThreads) {
+                if (t.getState() == Thread.State.RUNNABLE) {
+                    retry = true;
+                    break;
+                }
+            }
+            if (!retry) {
+                break;
+            }
         }
     }
 
--- a/jdk/test/java/lang/management/ThreadMXBean/SynchronizerLockingThread.java	Tue May 26 18:07:14 2009 -0700
+++ b/jdk/test/java/lang/management/ThreadMXBean/SynchronizerLockingThread.java	Tue May 26 18:09:32 2009 -0700
@@ -28,7 +28,7 @@
  *          monitors.
  * @author  Mandy Chung
  *
- * @build ThreadDump
+ * @build ThreadDump Utils
  */
 
 import java.lang.management.*;
@@ -63,6 +63,9 @@
                throw new RuntimeException(e);
            }
         }
+
+        Utils.waitForBlockWaitingState(t1);
+        Utils.waitForBlockWaitingState(t2);
     }
 
     static long[] getThreadIds() {